select distinct count(id)する場合 次に、基本的に次のことを行います:
select distinct cnt
from (select count(id) as cnt from t) t;
内部クエリは1行しか返さないため、distinct 何もしていません。クエリは行数をカウントします テーブル内(より正確には、idが存在する行数 nullではありません 。
一方、あなたがそうするとき:
select count(distinct id)
from t;
次に、クエリはidであるさまざまな値の数をカウントします テーブルで引き受けます。これはあなたが望むもののように見えます。