Saat Anda melakukan select distinct count(id) maka pada dasarnya Anda melakukan:
select distinct cnt
from (select count(id) as cnt from t) t;
Karena kueri dalam hanya mengembalikan satu baris, distinct tidak melakukan apa-apa. Kueri menghitung jumlah baris dalam tabel (lebih tepatnya, jumlah baris di mana id bukan null ).
Di sisi lain, ketika Anda melakukannya:
select count(distinct id)
from t;
Kemudian kueri menghitung jumlah nilai berbeda yang id mengambil di meja. Tampaknya ini yang Anda inginkan.