Este não é um bug do MySQL.
Uma consulta de agregação retornará uma linha por grupo encontrado. Sem um
group by
, há um grupo -- a tabela inteira. Admito que isso é um pouco complicado, porque ainda existe um grupo, mesmo quando não há linhas na tabela. Com um
group by
, há uma linha por grupo. Se não houver linhas em um grupo, o grupo não aparecerá. No seu caso, a consulta:SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
Retornará uma linha, com dois
NULL
s seguido por 0
. A mesma consulta com:
GROUP BY `a`,`b`
não retornará nenhuma linha porque não há linhas para formar grupos.