Да, нули - это боль. Несколько способов справиться с ними. Некоторые из них являются специфическими функциями MS-SQL:
Метод 1: Будьте откровенны во всех опциях
IF ((@1 <> @2)
OR (@1 is NULL AND @1 IS NOT NULL)
OR (@1 is NOT NULL AND @1 IS NULL)
OR (@3 <> @4)
OR (@3 is NULL AND @4 IS NOT NULL)
OR (@3 is NOT NULL AND @4 IS NULL))
Метод 2: Мы используем функцию для преобразования нуля во что-то другое, что, как вы знаете, не будет совпадать:
IF ((IsNull(@1,-1) <> IsNull(@2,-1)
OR (IsNull(@3,-1) <> IsNull(@4,-1))
Иногда этот первый вариант лучше, потому что он более явный.
Второй имеет побочный эффект от сопоставления NULL с NULL.
Редактировать: если вы хотите установить их заранее, просто наберите
SET @1 = IsNull(@1,-1);
Если он равен нулю, он будет установлен в -1. Если нет, он оставит это в покое. Я думаю, что чище сделать это внутри функции, в соответствии с моим методом 2.