Я познаю космические стандарты sql.
И тут необычное определение null - это не отсутствие значения как в наземных языках, а неизвестное значение (The null value represents an unknown value, and it is not known whether two unknown values are equal). И шут с ним. Ровно до тех пор, пока не начинаешь сравнивать A и B из которых одно или оба - null.
Запросы, в которых значения переменных и столбцов я для большей ясности заменил константами
select 1 <> 1;
select 1 <> 2;
select null <> 1;
select null <> null;
выдают следующий результат: f, t, null, null. Соответственно, если подобное выражение вставить в IF то результат будет несколько неожиданным.
Правильный же подход заключается в использовании иных логических операторов. Например, эти запросы нужно перепистаь так:
select 1 IS DISTINCT FROM 1
select 1 IS DISTINCT FROM 2
select null IS DISTINCT FROM 1
select null IS DISTINCT FROM null
Результатом будет вполне приятное: f,t,t,f
Больше треша, угара и смешных булевых операторов конечно же в
документации. К слову, SQL Server 2008R2
не поддерживает эту часть никому-не-нужного-стандарта.