Esto es solo una pregunta por curiosidad, pero estoy mirando una base de datos y extrayendo datos de una tabla con una consulta en una de las columnas. La columna tiene cuatro valores posibles null
, 0
, 1
, 2
. Cuando ejecuto la consulta como:SQL no muestra valores nulos en una consulta no igual?
SELECT * FROM STATUS WHERE STATE != '1' AND STATE != '2';
consigo los mismos resultados que en ejecución:
SELECT * FROM STATUS WHERE STATE = '0';
es decir, las filas con un valor nulo en el comando superior en la columna consultada parecen omitirse de los resultados, ¿esto siempre ocurre en SQL?
Estoy ejecutando mis comandos a través de Oracle SQL Developer.
"siempre pasa esto en SQL?" - respuesta corta: no. SQL exhibe [lógica de tres valores (3VL)] (http: //en.wikipedia.org/wiki/Three-valued_logic). Digo "exhibits" muy deliberadamente porque las especificaciones para SQL 3VL son inconsistentes e incompletas. Simplemente tiene que aprender todos los casos extremos. El mejor enfoque de IMO es evitar nulos en SQL. – onedaywhen
Sé que esto no agrega ninguna idea, pero ¿debería el 'O 'ser un' Y'? – user123444555621
De lo que puedo recordar cuando estaba haciendo esto como OR es correcto, es decir, solo quería filas de ESTADO 0 pero también recibía filas NULAS. No estaba al tanto de la lógica de tres valores como @Vash describe en su respuesta. Debería haber usado ESTADO NO EN ('1', '2') como señaló Michael Durrant. Mi SQL es mucho mejor que en ese entonces jajaja. –