Contenido de esta guía
Qué significa
COALESCE devuelve el primer argumento que no es NULL. Si todos son NULL, el resultado también es NULL. Sirve para elegir una alternativa dentro del resultado sin modificar los valores guardados.
- Lee los argumentos de izquierda a derecha.
- Coloca primero el dato preferido.
- Usa como alternativa un valor que no distorsione el significado.
Qué problema resuelve
En una lista de clientes puede faltar el email, pero la interfaz necesita mostrar algo comprensible. COALESCE permite devolver el email real cuando existe y un texto alternativo cuando no existe. Esa sustitución es de presentación: la columna sigue conteniendo NULL.
No confundas ausencia con cero: NULL significa que no hay un valor conocido. Sustituirlo por 0, una fecha o una cadena vacía puede cambiar la interpretación del dato.
Sintaxis básica
COALESCE(valor_preferido, alternativa_1, alternativa_2, ...)Ejemplo guiado con datos del proyecto
| id | nombre | |
|---|---|---|
| 1 | Ana Torres | ana@example.test |
| 4 | Diego López | NULL |
SELECT id, nombre,
COALESCE(email, 'Sin email') AS email_visible
FROM clientes
WHERE id IN (1, 4)
ORDER BY id;| id | nombre | email_visible |
|---|---|---|
| 1 | Ana Torres | ana@example.test |
| 4 | Diego López | Sin email |
Cómo funciona
- Para Ana, el primer argumento ya contiene un email y se devuelve sin consultar la alternativa.
- Para Diego,
emailesNULL, así que se utiliza'Sin email'. - El alias
email_visibledeja claro que es una representación calculada. - Ninguna fila de
clientesse modifica.
Error frecuente
Inventar un dato que parece real
SELECT COALESCE(fecha_devolucion, CURRENT_DATE)
FROM prestamos;Una devolución desconocida no equivale a una devolución realizada hoy. Esta expresión puede hacer que un préstamo activo parezca cerrado. Para la interfaz, utiliza un texto inequívoco como “Pendiente” o calcula un estado con CASE.
Comprueba lo aprendido
Muestra un contacto legible
Devuelve nombre y un campo contacto para los clientes 4 y 6. Usa el email cuando exista y “No disponible” cuando sea NULL. Ordena por id.
email.'No disponible'.WHERE id IN (4, 6) y ordena por id.Solución razonada
SELECT nombre,
COALESCE(email, 'No disponible') AS contacto
FROM clientes
WHERE id IN (4, 6)
ORDER BY id;| nombre | contacto |
|---|---|
| Diego López | No disponible |
| Pablo Sanz | No disponible |
Ambos clientes tienen un email nulo en la base educativa, por lo que la columna contacto muestra “No disponible” en las dos filas. El dato almacenado permanece sin cambios.
Compatibilidad y tipos
COALESCE está ampliamente soportado, pero sus argumentos deben poder resolverse a un tipo compatible. PostgreSQL exige un tipo común; SQL Server aplica sus reglas de precedencia y nulabilidad; SQLite devuelve el primer valor no nulo con su tipo dinámico. No mezcles textos, números y fechas sin comprobar el tipo final. Tampoco dependas de efectos secundarios en los argumentos: el modo de evaluación puede variar.
Qué debes recordar
- Devuelve el primer argumento no nulo.
- La alternativa debe representar honestamente la ausencia.
- No modifica la tabla: solo cambia el resultado de la expresión.
- Los argumentos deben ser compatibles con las reglas de tipos del motor.
Conceptos relacionados
Fuentes técnicas consultadas
Las reglas sobre valores nulos, orden de alternativas y resolución de tipos se comprobaron en estas referencias primarias.