Quando si esegue select distinct count(id)
quindi stai praticamente facendo:
select distinct cnt
from (select count(id) as cnt from t) t;
Poiché la query interna restituisce solo una riga, il distinct
non sta facendo niente. La query conta il numero di righe nella tabella (beh, più precisamente, il numero di righe in cui id
non è null
).
D'altra parte, quando lo fai:
select count(distinct id)
from t;
Quindi la query conta il numero di valori diversi che id
prende posto in tavola. Questo sembrerebbe quello che vuoi.