de Martin LE TARNEC.

NULL en la base de datos Oracle


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 NULL

Para 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 dual
D D D
- - -
X X X

Concatenar 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 VARCHAR2. 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.

Contenido

  1. NULL dentro de los índices — Cada índice es un índice parcial

  2. Restricciones NOT NULL — afecta el uso de los índices

  3. Emular índices parciales — usando funciones basados en índices

Previous pageNext page

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia