"is not null" o "<> Null" en Sql Server
Trabajando con NHinbernate. y mapeando unas clases, guardaba unos datos y hacia esta consulta que para mi estaba bien:
Pero lamentablemente no me arrojaba los datos que yo necesitaba y luego darle y darle vueltas hice esta consulta.select * from table where campo <> NULL;
Y ahí me di cuenta que el mapeo de Hibernet, y los cambios que había hecho estaban bien. Perdí toda una mañana de trabajo por esto :(.select * from table where campo is not NULL;
El resumen de esa mañana fue darme cuenta no es lo mismo "is not null" o "<> Null", por lo menos en SQL SERVER. Como una lección aprendida siempre voy a consultar "IS NOT NULL" o "IS NULL", según sea el caso.
Actualización: Video de Teclado Mecanico Hp gk200, con interruptores Outemu Blue. Video de mi Canal. Ahora ya que están de moda los teclados mecánicos no me quería quedar atrás, próximamente una entrada sobre este interesante tema.
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com
podrias dejar mas explisita la diferencia , ya que según lo que yo entiendo
ResponderEliminarselect * from table where campo is not null serian todos los que no sean null
y si hago un select * from table where campo <> null
serian todos los que sean distintos de null
buscando el sig de esto encontre lo siguiente
"distinto, ta"
1. adj. Que no es igual ni semejante:
el cangrejo de río y el de mar son distintos.
"http://www.wordreference.com/definicion/distinto"
El problema no esta en usar o no usar '<>' para comparar contra un valor nulo, sino que esta en el hecho de comparar contra nulo. No se puede comparar contra nulo, sino que hay que preguntar si se es o no es nulo, lo cual es otra cosa diferente. Es por ello que la consulta correcta es la que pregunta por null, es decir: 'SELECT ... WHERE X IS NULL'.
ResponderEliminarjejejej vale , ya con eso queda mas claro , por que es verdad en c# siempre preguntamos por (==null) o (!=null) pero nunca por (<> null) :D
ResponderEliminarhola soy nueva en esto!! :( y aun no entiendo bien, yo tengo esta situacion...
Eliminartengo una BD que es mostrada en un DataGridView pero quiero fltrar los campos en donde la columna "edad" este vacia por ejempolo y despues mostrar los campos en donde si hay un nombre, como podria hacerlo??
la raíz está en que los operadores de comparación (=, <>) no están "preparados" para recibir el valor NULL en sus parámetros, en vez de True o False devuelven Unknown.
ResponderEliminarDe echo ocurre lo mismo con las varialbes:
DECLARE @foo INT
SET @foo = NULL
SELECT var
FROM tmp
WHERE NOT id = @foo
tendría el mismo resultado inesperado.
para hacer más limpia la comparación con nulos el SQL provee la función ISNULL(campo, valor) que devuelve "valor" si "campo" es nulo.
un ejemplo muy burdo:
SELECT *
FROM table
WHERE ISNULL(campo, "") = ""
obviamente es mucho mas lento que "IS NOT NULL" sin embargo tiene sentido en el tratamiento con varialbes T-SQL y tablas que aceptan valores nulos.
Para mayores enredos, el estándar SQL99 dice que Unknown y NULL son equivalentes.
ResponderEliminarY de hecho en PostgreSQL, no existe Unknown, solo NULL. Luego se tiene:
select (1 = null) is null
=> true
select (1 <> null) is null
=> true
Y también:
select (null = null) is null
=> true
select (null <> null) is null
=> true
select (null is null) is not null
=> true
Muy buenas las explicaciones.
ResponderEliminarMe he despejado de varias dudas.
Muchas gracias.
--> "Shane"
Me acabas de ahorrar (aunque ya llevaba un poco de tiempo pensandolo) varias horas de frustracion...
ResponderEliminarGracias por el dato del "is not null" ...
Es verdad es todo un rollo esto de las fechas, después de 1 hora de darle vueltas a una consulta con una campo fecha sin resultado, aleluya SAN GOOGLE y te encontré. Mil gracias. Definitivamente IS NOT NULL es muy diferente a <>NULL.
ResponderEliminarCordiales saludos
Una pregunta, se puede utilizar el is not null con dos campos al mismo tiempo?
ResponderEliminarEs decir: where campo,campo is not null?
Hay alguna manera de hacer esto?
Muchas gracias
nunca lo he visto, no creo que se pueda. :(
ResponderEliminarEstoy estudiando y habian unos triggers que no me salían, y no entendía donde estabael problema, pues resultó ser esto, gracias!
ResponderEliminarSaludos
Me sacaste de un apuro, ya que estoy realizando una pequeña aplicacion web en asp.net en c# utilizando sql server 2008, y si no hubiera sido por su aclaracion, creo que todavia estaria en lios.
ResponderEliminarGRACIAS POR EL APORTE ME SIRVIO DE MUCHO, SIGUE ADELANTE...
ResponderEliminarde nada, esa es la idea del blog xD
ResponderEliminarkeylis, lo q podrias acr en lo q mencionas, es concatenar ambos, darle un alias i preguntar por el alias, x otro lado Huguito buen aporte justo taba cabezeando sobre el tema :) ;)
ResponderEliminarexcelente respuesta gerardocontijoch..era lo que buscaba!!
ResponderEliminares la leche me saco de un atoyadero
ResponderEliminarllevo 2 dis con esto
y por fin vi la luz
Exito!!
ResponderEliminarMuchas gracias me ha servido de mucho. Saludos.
ResponderEliminarMuchas gracias , me ha venido muy bién
ResponderEliminardisculpen tengo una duda haber si me pueden echar la mano quiero compara dos datos null si son iguales que me mande un error en otra columan ya tengo la condición me faltaría el comando para interpretar el null
ResponderEliminarremplaza antes el valor null por otra cosa y despues los comparas,,,ejemplo case when campo is null then 'nulo' else campo end as campo....y en el otro campo lo mismo y luego los comparas
Eliminarnecesito ayuda,como puedo validar si el campo registra valores nulos y espacios ''...yo coloco lo siguiente y me arroja error case when campo in (is null,'') then 'a' else campo end as validado
ResponderEliminarNece
ResponderEliminarME PUEDEN AYUDAR CON ESTE CAMPO EN UNA VISTA BDLICAN.dbo.[Datos del Paciente].Apellido1 + ' ' + BDLICAN.dbo.[Datos del Paciente].Apellido2 + ' ' + BDLICAN.dbo.[Datos del Paciente].Nombre1 + ' ' + BDLICAN.dbo.[Datos del Paciente].Nombre2 HAY USUARIOS QUE NO TIENEN SEGUNDO NOMBRE Y APARECE COMO NULL
ResponderEliminardfdffd
ResponderEliminarHola, si me pueden ayudar les agradezco de antemano.
ResponderEliminarQuiero hacer una consulta a una tabla donde quiero comparar si un campo fecha esta vacio o nulo: estoy utilizando campo IS NOT NULL pero no estoy segura si con esto cubro mis necesidades.
Saludos Cordiales a todos y muchisimas gracias.
Hola necesito obtener de una BD, los campos que tengan el valor de uno o vacios. Como debo hacer la consulta. Los campos son rojo, verde azul; estos tienen la cantidad e carros en numero de ese color o bien están vacios. Necesito esa consulta
ResponderEliminarHola, si me pueden ayudar le agradezco.
ResponderEliminarTengo un procedimiento almacenado en postgres que recibe un array si uno de los datos del array viene vació como se haría esta validación si array[i] <>'' o´ se realizara la validación array[i] is not null.
Muchas Gracias
hola muy buenas perdona me puede alguien ayudar a resolver esta consulta de sql con case: tengo una tabla que se llama modelo pero solo tengo los campos id_modelo, nombre, num_generaciones, id_marca, y ventas y no ce como sacar las valoraciones...
ResponderEliminar"Muestra el id_modelo, modelo y valoración de todos los modelos. Valoración valdrá ‘malo’ si se ha
tenido menos de 5 generaciones del modelo y ‘bueno’ en cualquier otro caso. Hazlo usando case (de dos
formas distintas), decode e iif"