Если вы установите ANSI_NULLS в OFF, вы получите то, что хотите получить, но это не рекомендуется:
SET ANSI_NULLS OFF;
В этом случае предикат, который оценивается как UNKNOWN. Очевидно, что НЕ ИСТИНА - ЛОЖЬ, а НЕ ЛОЖЬ - ИСТИНА. Тем не менее, НЕ НЕИЗВЕСТНО остается НЕИЗВЕСТНЫМ. По-другому:
NULL не имеет значения и поэтому не может сравниваться с помощью операторов скалярного значения.
Вы должны использовать ISNULL()
.
DECLARE @dt AS DATE = NULL;
SELECT orderid, shippeddate
FROM Sales.Orders
WHERE ISNULL(shippeddate, '99991231') = ISNULL(@dt, '99991231')