Lorsque vous faites select distinct count(id)
alors vous faites essentiellement :
select distinct cnt
from (select count(id) as cnt from t) t;
Étant donné que la requête interne ne renvoie qu'une seule ligne, le distinct
ne fait rien. La requête compte le nombre de lignes dans le tableau (enfin, plus précisément, le nombre de lignes où id
n'est pas null
).
En revanche, lorsque vous faites :
select count(distinct id)
from t;
Ensuite, la requête compte le nombre de valeurs différentes que id
prend dans le tableau. Cela semble être ce que vous voulez.