La cláusula NULL en SQL causa frecuentes confusiones.
El concepto básico detrás de NULL es sencillo: se usa para representar un dato ausente;
para representar un dato
ausente; existen, sin embargo, algunas peculiaridades.
Tienes que usar IS NULL en lugar de = NULL,
por ejemplo. Además, la base de datos Oracle tiene una singularidad
adicional para NULL: por una parte, no le otorga el significado
tal como el estándar requiere y por otra parte: tiene
un comportamiento “raro” con los NULL dentro de los
índices.
El estándar SQL no define NULL como un valor, sino más
bien como un marcador de posición para un valor ausente o desconocido. Por
consiguiente, ningún valor puede ser NULL. En su lugar, la
base de datos Oracle trata las cadenas de caracteres vacías como
NULL:
SELECT '0 IS NULL???' AS "what is NULL?" FROM dual
WHERE 0 IS NULL
UNION ALL
SELECT '0 is not null' FROM dual
WHERE 0 IS NOT NULL
UNION ALL
SELECT ''''' IS NULL???' FROM dual
WHERE '' IS NULL
UNION ALL
SELECT ''''' is not null' FROM dual
WHERE '' IS NOT NULLPara agregar un poco más de confusión, existe también un caso en el
que la base de datos Oracle trata los NULL como cadenas de
caracteres vacías.
SELECT dummy
, dummy || ''
, dummy || NULL
FROM dualD D D
- - -
X X XConcatenar la columna DUMMY (siempre contiene
'X') con NULL podría traer
NULL.
El concepto de NULL se utiliza en muchos lenguajes de
programación. No importa dónde se vea, una cadena de caracteres nunca es
un NULL excepto en la base de datos Oracle. Es, de hecho,
imposible almacenar una cadena de caracteres vacía dentro de un campo
VARCHAR. Si se intenta, la base de datos Oracle almacena
solamente un NULL.
Esta peculiaridad no es solo rara, sino que también peligrosa.
Además, la peculiaridad de Oracle con NULL no se queda aquí,
continúa con los índices.
Si te gusta mi manera de explicar, te encantará mi libro.

