CyberMax, потомучто если сгруппировать 0 строк, то 0 строк и получится.
Если затем в каждой полученной строке(группе) посчитать count(*) то результат не изменится - 0 строк.
В первом запросе COUNT(*) считает кол-во строк.
Во втором - кол-во строк в полученных группах. Групп 0шт.
Кол-во групп можно снова посчитать снаружи:
SELECT COUNT(*)
FROM (SELECT COUNT(*) AS b FROM RDB$DATABASE D WHERE 1 = 0 GROUP BY D.RDB$RELATION_ID)
результат 0