IS DISTINCT FROM
предикатът е въведен като характеристика T151 на SQL:1999 и неговото четливо отрицание, IS NOT DISTINCT FROM
, беше добавен като функция T152 на SQL:2003. Целта на тези предикати е да гарантират, че резултатът от сравняването на две стойности е или Вярно или False , никога Неизвестен .
Тези предикати работят с всеки сравним тип (включително редове, масиви и мултинабори), което прави доста сложно имулирането им. Въпреки това, SQL Server не поддържа повечето от тези типове, така че можем да стигнем доста далеч, като проверим за нулеви аргументи/операнди:
-
a IS DISTINCT FROM b
може да се пренапише като:((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
-
a IS NOT DISTINCT FROM b
може да се пренапише като:(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
Вашият собствен отговор е неправилен, тъй като не отчита, че FALSE OR NULL
оценява на Неизвестно . Например, NULL IS DISTINCT FROM NULL
трябва да се оцени на False . По същия начин, 1 IS NOT DISTINCT FROM NULL
трябва да се оцени на False . И в двата случая вашите изрази дават Неизвестно .