Oracle/PLSQL: diferencia entre cadena vacía y valor nulo

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: diferencia entre cadena vacía y valor nulo

Pregunta: ¿Cuál es la diferencia entre un valor “nulo” y un valor “nulo”? Cuando selecciono esos campos “nulo” frente a “nulo”, obtengo dos conjuntos de resultados diferentes.

R: Las cadenas vacías se tratan como nulas en Oracle. Demostremos.

Creamos una tabla llamada proveedores con la siguiente definición de tabla:

create table suppliers
( supplier_id number,
  supplier_name varchar2(100)
);

A continuación, insertaremos dos registros en esta tabla.

insert into suppliers (supplier_id, supplier_name )
values ( 10565, null );

insert into suppliers (supplier_id, supplier_name )
values ( 10567, '' );

La primera instrucción inserta un registro con nombre_proveedor vacío, mientras que la segunda instrucción inserta un registro con una cadena vacía como nombre_proveedor.

Ahora, recuperemos todas las filas donde el nombre del proveedor es un valor de cadena vacío de la siguiente manera:

select * from suppliers
where supplier_name="";

Cuando ejecuta esta instrucción, desea recuperar la fila insertada anteriormente. Pero en cambio, esta declaración no recupera ningún registro.

Ahora, intente recuperar todos los registros en los que el nombre del proveedor contenga un valor nulo:

select * from suppliers
where supplier_name is null;

Cuando ejecute esta declaración, recuperará estas dos líneas. Esto se debe a que Oracle ahora ha cambiado sus reglas para que las cadenas vacías se comporten como valores vacíos.

También es importante tener en cuenta que los valores nulos son únicos porque no puede usar los operandos habituales (=,<、> Esperar). En su lugar, debe utilizar las condiciones IS NULL y IS NOT NULL.