Ce n'est pas un bogue MySQL.
Une requête d'agrégation renverra une ligne par groupe rencontré. Sans group by
, il y a un groupe -- la table entière. J'avoue que c'est un peu délicat, car il y a toujours un groupe, même s'il n'y a pas de lignes dans le tableau.
Avec un group by
, il y a une ligne par groupe. S'il n'y a pas de lignes dans un groupe, le groupe n'apparaît pas. Dans votre cas, la requête :
SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
Retournera une ligne, avec deux NULL
s suivi de 0
.
La même requête avec :
GROUP BY `a`,`b`
ne renverra aucune ligne car il n'y a pas de lignes pour former des groupes.