"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:
select * from table where campo <> NULL;
Pero lamentablemente no me arrojaba los datos que yo necesitaba y luego darle y darle vueltas hice esta consulta.
select * from table where campo is not 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 :(. 

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

Comentarios

  1. podrias dejar mas explisita la diferencia , ya que según lo que yo entiendo


    select * 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"

    ResponderEliminar
  2. 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'.

    ResponderEliminar
  3. jejejej vale , ya con eso queda mas claro , por que es verdad en c# siempre preguntamos por (==null) o (!=null) pero nunca por (<> null) :D

    ResponderEliminar
    Respuestas
    1. hola soy nueva en esto!! :( y aun no entiendo bien, yo tengo esta situacion...
      tengo 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??

      Eliminar
  4. 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.
    De 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.

    ResponderEliminar
  5. Para mayores enredos, el estándar SQL99 dice que Unknown y NULL son equivalentes.

    Y 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

    ResponderEliminar
  6. Muy buenas las explicaciones.
    Me he despejado de varias dudas.
    Muchas gracias.

    --> "Shane"

    ResponderEliminar
  7. Me acabas de ahorrar (aunque ya llevaba un poco de tiempo pensandolo) varias horas de frustracion...

    Gracias por el dato del "is not null" ...

    ResponderEliminar
  8. 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.
    Cordiales saludos

    ResponderEliminar
  9. Una pregunta, se puede utilizar el is not null con dos campos al mismo tiempo?

    Es decir: where campo,campo is not null?

    Hay alguna manera de hacer esto?

    Muchas gracias

    ResponderEliminar
  10. nunca lo he visto, no creo que se pueda. :(

    ResponderEliminar
  11. Estoy estudiando y habian unos triggers que no me salían, y no entendía donde estabael problema, pues resultó ser esto, gracias!
    Saludos

    ResponderEliminar
  12. 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.

    ResponderEliminar
  13. GRACIAS POR EL APORTE ME SIRVIO DE MUCHO, SIGUE ADELANTE...

    ResponderEliminar
  14. keylis, 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 :) ;)

    ResponderEliminar
  15. excelente respuesta gerardocontijoch..era lo que buscaba!!

    ResponderEliminar
  16. es la leche me saco de un atoyadero
    llevo 2 dis con esto
    y por fin vi la luz

    ResponderEliminar
  17. Muchas gracias me ha servido de mucho. Saludos.

    ResponderEliminar
  18. Muchas gracias , me ha venido muy bién

    ResponderEliminar
  19. disculpen 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

    ResponderEliminar
    Respuestas
    1. remplaza 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

      Eliminar
  20. necesito 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

    ResponderEliminar
  21. ME 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

    ResponderEliminar
  22. Hola, si me pueden ayudar les agradezco de antemano.
    Quiero 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.

    ResponderEliminar
  23. 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

    ResponderEliminar
  24. Hola, si me pueden ayudar le agradezco.
    Tengo 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

    ResponderEliminar
  25. 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...


    "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"

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Buscar columnas en todas las tablas SQL SERVER

Aplicación y Aplicativo