El significado del valor null en Oracle es dato desconocido o valor inexistente. No es un valor cero, no es una cadena de texto vacia y por supuesto no se comporta como ninguno de ellos. Lo tendrás más claro con unos ejemplos…
Valor null al crear una tabla
Al crear una tabla tienes la posibilidad de decidir si cada campo podrá tener valores nulos o si el campo tiene que tener valor siempre. Parece lógico que si tenemos una tabla de clientes su identificador nunca podrá estar vacío y su nombre tampoco, y también puede ser que el cliente por el motivo que sea no nos proporcione su ciudad o código postal y ambos si puedan no estar informados, es decir, no tengan valor.
CREATE TABLE clientes ( id_cliente numeric(2,0) not null, nombre character varying(50) not null, ciudad character varying(50) null, cp numeric(5,0) );
Te preguntaras, ¿qué diferencia hay entre declarar un campo como null (línea 5) o no especificárselo (línea 6)? Ninguna, no especificar si el campo puede ser null o no significa que podrá contener valores nulos.
Insertar en una tabla con o sin valores null
Prueba/observa estos dos insert:
insert into clientes (id_cliente,nombre) values (1 , 'Miguel Troyano'); insert into clientes (id_cliente,nombre, ciudad, cp) values (2 , 'Pepe Flores', null, null); select * from clientes;
En el primer insert (líneas 1 y 2) podemos insertar registros solo en dos columnas ya que en el resto de campos es posible no insertar ningún valor ya que permite los nulos.
En el segundo insert (líneas 4 y 5) hacemos lo mismo, pero especificando que tanto la ciudad como el código postal serán nulos. Observa que al especificar el valor null, no va entre comillas ya que no se trata de un literal. En ambos casos el resultado sera el mismo.
Si intentas insertar un valor null en un campo que tiene declarado que no puede contener este valor, el sistema te devolverá un mensaje de error.
Filtrar valores nulos
Cuando una columna tiene valores nulos es posible realizar un filtro con la palabra reservada where que ya vimos en este artículo. Siguiendo el ejemplo anterior podríamos realizar una búsqueda de aquellos clientes que no nos han informado su ciudad (líneas 1 y 2) o mostrar solo aquellos que si tienen valor en el campo ciudad (líneas 4 y 5)
select * from clientes where ciudad is null; select * from clientes where ciudad is not null;
Como he comentado anteriormente null no es una cadena y no es lo mismo where ciudad is null o where ciudad = «»