v17 studio online management espaƱol documentacion books sql sql-server-2012

studio - <> operador en SQL



sql server management studio express (6)

Comparar algo con null siempre dará como resultado unknown . Es por eso que necesita usar el operador is para comparar COALESCE null o usar funciones como COALESCE o isnull para reemplazar el null

Tengo una mesa como esta

ID Name IsDeleted 1 Yogesh Null 2 Goldy 1

Ahora cuando ejecuto esta consulta

select * from tableName where IsDeleted <> 1

Debería obtener el registro ID 1 , pero no lo estoy obteniendo,

Pero cuando corro esto

select * from tableName where IsDeleted is null

ID 1 registro ID 1 ,

¿Por qué estoy enfrentando este comportamiento? ¿No es NULL <> 1 una afirmación verdadera en SQL?

IsDeleted es un campo de tipo de bit con Allow Null true


La práctica normal dictaría que si tenía una columna que esencialmente era un verdadero falso, sí, ningún tipo de campo, entonces debería usar un campo de bit con el valor predeterminado establecido en 0.

Entonces en tu caso anterior podrías simplemente ejecutar esto:

select * from tableName where IsDeleted = 0

Pero en respuesta a su pregunta anterior, si el Nulo es un valor NULL verdadero en la tabla, entonces esto funcionará para usted:

select * from tableName where IsDeleted is null

o

select * from tableName where isnull(IsDeleted,0) = 0

para obtener el registro 1 y

select * from tableName where IsDeleted is not null

para obtener el récord 2

Buena suerte

Pablo.


Obtenga información acerca de NULL: una comparación con NULL (en SQL estándar) arroja UNKNOWN, que no es verdadera ni falsa (y la razón por la cual no se cumple con sus expectativas).

Prueba esto:

PRINT CASE WHEN 1 = NULL THEN ''1 = NULL'' WHEN 1 <> NULL THEN ''1 <> NULL'' ELSE ''1 is neither = NULL nor <> NULL'' END

Primero puede asegurarse de no tener un valor NULL (por ejemplo, utilizando las funciones ISNULL o COALESCE ), o usar una condición con el operador IS NULL o IS NOT NULL .


usted compara diferentes tipos. en este caso es otro tipo (desconocido) y no comparable

utilice la instrucción o para comparar cada tipo separado

WHERE IsDeleted <> 1 OR IsDeleted is null


select * from tableName where isnull(IsDeleted,0) <> 1


select * from table where COALESCE(IsDeleted, 0) <> 1 -- or ISNULL instead of COALESCE. --ISNULL seems to be better in subqueries, but it''s not ANSI SQL.

o

select * from table where IsDeleted <> 1 or IsDeleted IS NULL