Агрегатные функции (COUNT
, SUM
, ETC) удаляют нули, поэтому, если вы хотите, чтобы они были подсчитаны, вы можете либо COUNT(*)
, который будет считать записи, а не отдельные значения, или делать то, что вы делаете ISNULL
/ COALESCE
для замены нулевых значений.
Если вы хотите посчитать только нулевые значения, сделайте подсчет (*), где значение IS NOT NULL
, как предложил @Derek Kromm.
FWIW, я не думаю, что DISTINCT
необходим, так как он может сбить ваш счет, если у вас есть несколько нулей, которые вы хотите считать как более одного.