ANSI SQL defines NULL como no equivalentes a nada, incluso a otra instancia de NULL. La forma canónica es utilizar IS NULL
y IS NOT NULL
.
También existe la opción MS SQL Server SET ANSI_NULLS
. Desactivar esta opción tiene el efecto de tener WHERE x = NULL
haciendo exactamente lo que espera. También, sin embargo, incluirá cualquier valor NULL
en una consulta como WHERE x <> 'abc'
, que puede no ser lo que esperas. Esta opción es específica de la conexión, por lo que cambiarla para su conexión no afectará a los demás. También puede establecer una configuración predeterminada en el nivel de la base de datos. Al crear un procedimiento almacenado, la opción se captura en creación tiempo - no en tiempo de ejecución.
Otro truco consiste en crear una consulta como WHERE ISNULL(x, '') = ISNULL(@x, '')
. No creo que sea SARGable, por lo que el rendimiento no es tan bueno como WHERE (x IS NULL AND @x IS NULL) OR (x = @x)
, pero es mucho mejor escribir y construir dinámicamente.
Ah, y, como estamos hablando de ANSI SQL. La versión ANSI SQL de ISNULL
es COALESCE
.
Para responder a la pregunta en el título, literalmente, usaría 'SET ANSI_NULLS OFF'. Esta opción está (correctamente) obsoleta y deberías usar 'IS NULL' –