viernes, 17 de julio de 2026

馃悩 NULL y NOT NULL en PostgreSQL

Hasta ahora hemos aprendido a crear tablas y manipular datos mediante INSERT, SELECT, UPDATE y DELETE. Sin embargo, todav铆a no hemos hablado de una pregunta fundamental:

¿Qu茅 ocurre cuando no conocemos el valor de un dato?

Para responder esta pregunta, PostgreSQL utiliza el concepto de NULL.


馃 ¿Qu茅 es NULL?

NULL representa la ausencia de un valor.

No significa:

  • Cero (0)
  • Cadena vac铆a ('')
  • Espacio en blanco (' ')

Significa simplemente:

"No existe un valor almacenado para esta columna."

Por ejemplo, supongamos una tabla de empleados:

idnombretelefono
1Juan P茅rez555123456
2Ana L贸pezNULL

En este caso, no sabemos el tel茅fono de Ana L贸pez o simplemente no se ha registrado.


馃摝 ¿Cu谩ndo utilizar NULL?

Algunos ejemplos comunes son:

  • Un cliente a煤n no ha proporcionado su tel茅fono.
  • Un empleado no tiene fecha de baja.
  • Un producto todav铆a no tiene descripci贸n.
  • Un pedido a煤n no ha sido entregado.

En estos casos, permitir valores NULL tiene sentido.


馃敀 ¿Qu茅 es NOT NULL?

NOT NULL es una restricci贸n que obliga a proporcionar un valor para una columna.

Cuando una columna tiene la restricci贸n NOT NULL:

✅ Se debe proporcionar un valor.

❌ No se permite almacenar NULL.


馃彈️ Crear una tabla con NOT NULL

Supongamos que estamos creando una tabla de empleados.

CREATE TABLE empleados (
id INTEGER NOT NULL,
nombre VARCHAR(100) NOT NULL,
departamento VARCHAR(100),
salario NUMERIC(10,2)
);

En este ejemplo:

  • id es obligatorio.
  • nombre es obligatorio.
  • departamento es opcional.
  • salario es opcional.

✅ Insertar datos v谩lidos

Este INSERT funciona correctamente:

INSERT INTO empleados (
id,
nombre,
departamento,
salario
)
VALUES (
1,
'Juan P茅rez',
'Tecnolog铆a',
25000.00
);

Todos los campos obligatorios contienen un valor.


❌ Intentar insertar NULL en una columna NOT NULL

Ahora intentemos insertar un empleado sin nombre.

INSERT INTO empleados (
id,
nombre,
departamento,
salario
)
VALUES (
2,
NULL,
'Finanzas',
30000.00
);

PostgreSQL devolver谩 un error similar a:

ERROR: null value in column "nombre"
violates not-null constraint

Esto ocurre porque la columna nombre fue definida como NOT NULL.


❌ Omitir una columna obligatoria

Tambi茅n obtendremos un error si omitimos una columna obligatoria.

INSERT INTO empleados (
id,
departamento
)
VALUES (
3,
'Recursos Humanos'
);

Resultado:

ERROR: null value in column "nombre"
violates not-null constraint

Aunque no escribimos expl铆citamente NULL, PostgreSQL intent贸 asignarlo autom谩ticamente al no encontrar un valor para la columna.


✅ Insertar NULL en columnas que lo permiten

Las columnas sin NOT NULL aceptan valores nulos.

INSERT INTO empleados (
id,
nombre,
departamento,
salario
)
VALUES (
4,
'Ana L贸pez',
NULL,
NULL
);

Este registro se insertar谩 correctamente.


馃攳 Consultar valores NULL

Veamos los datos:

SELECT *
FROM empleados;

Resultado:

id | nombre | departamento | salario
----+-------------+--------------+----------
1 | Juan P茅rez | Tecnolog铆a | 25000.00
4 | Ana L贸pez | NULL | NULL


⚠️ Comparar NULL correctamente

Uno de los errores m谩s comunes es intentar buscar valores NULL utilizando el operador =.

❌ Incorrecto

SELECT *
FROM empleados
WHERE departamento = NULL;

Esta consulta no devolver谩 resultados.


Forma correcta

Para buscar valores nulos se utilizan:

IS NULL

o

IS NOT NULL


Buscar registros con NULL

SELECT *
FROM empleados
WHERE departamento IS NULL;


Buscar registros con valor

SELECT *
FROM empleados
WHERE departamento IS NOT NULL;


馃И Ejemplo completo

Crear tabla

CREATE TABLE productos (
codigo INTEGER NOT NULL,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
precio NUMERIC(10,2),
fecha_alta DATE
);


Insertar registro v谩lido

INSERT INTO productos (
codigo,
nombre,
descripcion,
precio,
fecha_alta
)
VALUES (
1001,
'Laptop',
'Equipo port谩til',
18000.00,
'2026-07-01'
);


Insertar registro con campos opcionales

INSERT INTO productos (
codigo,
nombre
)
VALUES (
1002,
'Monitor'
);

Funciona porque 煤nicamente se omitieron columnas que permiten NULL.


Intentar omitir un campo obligatorio

INSERT INTO productos (
codigo
)
VALUES (
1003
);

Resultado:

ERROR: null value in column "nombre"
violates not-null constraint


馃敡 Agregar NOT NULL a una columna existente

Tambi茅n es posible modificar una tabla ya creada.

Por ejemplo:

ALTER TABLE empleados
ALTER COLUMN nombre SET NOT NULL;

A partir de ese momento todos los registros nuevos deber谩n incluir un valor para nombre.


馃敡 Eliminar NOT NULL

Si posteriormente decidimos permitir valores nulos:

ALTER TABLE empleados
ALTER COLUMN nombre DROP NOT NULL;


馃挕 Buenas pr谩cticas

Usa NOT NULL en datos obligatorios

Generalmente deber铆an ser obligatorios:

  • Nombre de un cliente
  • Nombre de un producto
  • Correo electr贸nico (dependiendo del sistema)
  • Fecha de creaci贸n
  • Identificadores

Ejemplo:

nombre VARCHAR(100) NOT NULL


No uses NOT NULL en informaci贸n opcional

Por ejemplo:

  • Segundo apellido
  • Comentarios
  • Observaciones
  • Fecha de baja

Estos campos suelen permitir valores nulos.


Define la obligatoriedad desde el dise帽o

Es m谩s f谩cil decidir desde el principio qu茅 datos son obligatorios que modificar tablas con millones de registros posteriormente.


✅ Conclusi贸n

NULL representa la ausencia de un valor, mientras que NOT NULL obliga a que una columna siempre tenga informaci贸n.

Los conceptos m谩s importantes son:

  • NULL no es cero ni una cadena vac铆a.
  • Las columnas permiten NULL por defecto.
  • NOT NULL convierte una columna en obligatoria.
  • Intentar insertar NULL en una columna NOT NULL genera un error.
  • Para buscar valores nulos se utiliza IS NULL.
  • Para buscar valores no nulos se utiliza IS NOT NULL.


No hay comentarios:

Publicar un comentario