Kiedy robisz select distinct count(id)
wtedy w zasadzie robisz:
select distinct cnt
from (select count(id) as cnt from t) t;
Ponieważ zapytanie wewnętrzne zwraca tylko jeden wiersz, distinct
nic nie robi. Zapytanie zlicza liczbę wierszy w tabeli (a dokładniej, liczba wierszy, w których id
nie jest null
).
Z drugiej strony, kiedy to zrobisz:
select count(distinct id)
from t;
Następnie zapytanie zlicza liczbę różnych wartości, które id
zajmuje w tabeli. Wygląda na to, że tego chcesz.