Когато го направите select distinct count(id)
тогава по същество правите:
select distinct cnt
from (select count(id) as cnt from t) t;
Тъй като вътрешната заявка връща само един ред, distinct
не прави нищо. Заявката отчита броя редове в таблицата (добре, по-точно, броят на редовете, където id
не е null
).
От друга страна, когато го направите:
select count(distinct id)
from t;
След това заявката отчита броя на различните стойности, които id
поема на масата. Изглежда, че това е, което искате.