Når du select distinct count(id) så laver du som udgangspunkt:
select distinct cnt
from (select count(id) as cnt from t) t;
Fordi den indre forespørgsel kun returnerer én række, den distinct laver ikke noget. Forespørgslen tæller antallet af rækker i tabellen (nå, mere præcist, antallet af rækker hvor id er ikke null ).
På den anden side, når du gør:
select count(distinct id)
from t;
Derefter tæller forespørgslen antallet af forskellige værdier, der id tager fat i tabellen. Dette ser ud til at være det, du ønsker.