Здесь ответили:
Как работает ANSI_NULLS в TSQL?
Отключение ansi_nulls влияет только на сравнение, если один из операндов является пустой переменной илибуквальное значение null.
Кроме того, вам не следует писать новый код, используя параметр off, поскольку он не будет поддерживаться в будущем:
http://msdn.microsoft.com/en-us/library/ms188048.aspx
Обновить:
После повторного прочтения вашего вопроса, я думаю, что вы фактически говорите, почему:
select * from t1 where a=b
не работает так:
select * from t1 where a=b or (a=null and b=null)
, который вернется(нуль, ноль), (0,0) в вашем примере.
Итак, вы проверяете два условия:
- Оба значения столбца равны
- Оба значения столбца неизвестны
КогдаВаше выражение написано как = NULL, довольно ясно, что вы пытаетесь сделать.Но если записано как a = b, вы собираетесь проверить только 1-е условие или оба?
Еще один способ подумать, скажем, вы пишете запрос, чтобы вернуть всех клиентов с одинаковым номером дома + мобильный.Хотите ли вы вернуть клиентов с нулевыми значениями в обоих этих столбцах?
Короче говоря, MSFT не хочет автоматически проверять два условия, когда указано только одно - я думаю, что это правильный дизайн.