Significado del valor null en PostgreSQL

El significado del valor null 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 =

Conocer si un campo admite null o no

Si tu no has creado la tabla hay una manera muy rápida de conocer si el campo admite valores nulos o no. Ejecuta esta sentencia y mira la columna is_nullable (en la línea 3 cambia el nombre de la tabla por la que quieras consultar)

select table_name,column_name,udt_name,character_maximum_length,is_nullable 
  from information_schema.columns 
  where table_name = 'clientes';

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.