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.