När du gör select distinct count(id) då gör du i princip:
select distinct cnt
from (select count(id) as cnt from t) t;
Eftersom den inre frågan endast returnerar en rad, är distinct gör ingenting. Frågan räknar antal rader i tabellen (nåja, mer exakt, antalet rader där id är inte null ).
Å andra sidan, när du gör:
select count(distinct id)
from t;
Sedan räknar frågan antalet olika värden som id tar sig an i tabellen. Detta verkar vara vad du vill ha.