Trabajar con NULL aparece en un montón de situaciones: desde manejar datos ausentes en informes hasta filtrar y ordenar. Si tuvieras que elegir entre no tener un valor en la tabla o poner un número raro tipo 9999, la mayoría elegiría NULL — sí, no es lo más cómodo, pero al menos es honesto. Vamos a ver algunos casos típicos.
Ejemplo: ordenar productos con precios ausentes
Imagina que gestionamos una tienda online y tenemos una tabla de productos:
| product_id | name | price |
|---|---|---|
| 1 | Teléfono | 45000 |
| 2 | Portátil | NULL |
| 3 | Cámara | 25000 |
| 4 | Reloj inteligente | NULL |
Queremos ordenar los productos por precio, y los productos sin precio (NULL) deben ir al final.
SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;
Resultado:
| product_id | name | price |
|---|---|---|
| 3 | Cámara | 25000 |
| 1 | Teléfono | 45000 |
| 2 | Portátil | NULL |
| 4 | Reloj inteligente | NULL |
Fíjate en la construcción clave NULLS LAST. Por defecto, PostgreSQL para ASC pone los valores NULL al principio, pero con este parámetro los mandamos al final.
Ejemplo: filtrar estudiantes sin fecha de nacimiento
Tenemos una tabla de estudiantes y queremos seleccionar solo aquellos que no tienen fecha de nacimiento indicada.
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
Consulta:
SELECT student_id, name
FROM students
WHERE birth_date IS NULL;
Resultado:
| student_id | name |
|---|---|
| 2 | Anna Song |
| 4 | Maria Chi |
Hemos sacado la info de los estudiantes cuya fecha de nacimiento es desconocida.
Ejemplos de uso de funciones para manejar NULL
Ejemplo: calcular el total teniendo en cuenta posibles NULL
En la tabla de pedidos se guardan los importes de los pedidos. Pero los datos no siempre están completos, así que tenemos que tener en cuenta que en esos casos el importe puede ser 0.
Ejemplo de datos:
| order_id | customer_name | order_amount |
|---|---|---|
| 1 | Alex | 1200 |
| 2 | Maria | 2500 |
| 3 | Max | NULL |
| 4 | Xena | 3100 |
Consulta:
SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;
Resultado:
| total_amount |
|---|
| 6800 |
Usamos COALESCE(order_amount, 0) para reemplazar NULL por 0 antes de sumar. Así evitamos errores o cálculos incorrectos.
Ejemplo: mostrar texto en vez de NULL
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
En el informe hay que mostrar el texto "No especificado" para todos los datos vacíos en vez de NULL.
SELECT
customer_name,
COALESCE(order_amount::TEXT, 'No especificado') AS order_status
FROM orders;
Resultado:
| customer_name | order_status |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | No especificado |
| Xena | 3100 |
COALESCE() te deja mostrar el texto que quieras si el valor es NULL.
Escenarios más complejos con NULL
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
La tarea es ordenar los pedidos de forma que los pedidos con importe ausente estén al principio, y luego por orden descendente del importe, de mayor a menor.
SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;
Resultado:
| customer_name | order_amount |
|---|---|
| Max | NULL |
| Xena | 3100 |
| Maria | 2500 |
| Alex | 1200 |
Aquí usamos NULLS FIRST para poner los valores NULL antes que los demás.
Ejemplo: filtrar datos reemplazando valores NULL
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
En algunos informes hay que mostrar solo las filas donde el valor está presente o reemplazarlo por "Desconocido" si es NULL.
SELECT
student_id,
name,
COALESCE(birth_date::TEXT, 'Desconocido') AS birth_date_info
FROM students;
Resultado:
| student_id | name | birth_date_info |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | Desconocido |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | Desconocido |
Esto es especialmente útil en informes donde es importante mostrar que faltan datos.
Recomendaciones prácticas
Trabajar con NULL requiere estar atento. Aquí tienes algunos consejos útiles:
- Usa
IS NULLyCOALESCE()para comprobar y reemplazar valores ausentes. - Recuerda que las funciones de agregación ignoran
NULL, exceptoCOUNT(*). - Para ordenar, acuérdate de las palabras clave
NULLS FIRSTyNULLS LAST. - En los informes, deja claro cómo manejas
NULLpara evitar malentendidos con tus compis.
Estos conocimientos te ayudarán no solo a escribir consultas correctas, sino también a impresionar en una entrevista. ¡Saber trabajar con datos reales siempre vale más que solo la teoría!
GO TO FULL VERSION