Contenido de esta guía
Respuesta rápida
UNION combina resultados compatibles y deja una sola copia de cada fila. UNION ALL conserva todas las apariciones.
La pregunta correcta no es cuál resulta más rápido, sino si dos filas iguales representan el mismo elemento o dos hechos distintos.
Qué significa una fila repetida
Imagina dos listas de ciudades. Si quieres saber en qué ciudades existe actividad, una ciudad repetida no aporta una ubicación nueva y UNION encaja. Si cada fila representa una visita o un evento, eliminar una repetición destruiría información y necesitas UNION ALL.
| Pregunta | Elige | Motivo |
|---|---|---|
| ¿Necesitas elementos únicos? | UNION | Elimina filas completas duplicadas. |
| ¿Cada aparición cuenta? | UNION ALL | Conserva el número real de ocurrencias. |
| ¿Los conjuntos no pueden solaparse? | UNION ALL | No hace falta pedir una deduplicación innecesaria. |
| ¿No sabes por qué aparecen duplicados? | Revisar primero | Una operación de conjuntos no corrige un modelo o un JOIN defectuoso. |
Requisitos de las consultas
Cada consulta debe devolver el mismo número de columnas y cada posición debe contener tipos compatibles. Los nombres del resultado se toman normalmente de la primera consulta, por lo que conviene usar alias claros allí.
SELECT ciudad AS ubicacion
FROM clientes
WHERE activo = 1
UNION
SELECT ciudad
FROM clientes
WHERE email IS NULL
ORDER BY ubicacion;El ORDER BY se aplica al resultado combinado y se escribe una sola vez al final. Sin esa cláusula, ninguna de las dos operaciones garantiza un orden concreto.
Ejemplo guiado con el mismo dato dos veces
Entre los clientes activos aparecen Madrid, Valencia, Bilbao, Sevilla, Zaragoza y A Coruña. Los clientes sin correo pertenecen a Bilbao, Madrid y A Coruña, ciudades que ya estaban en el primer resultado.
| Operación | Cantidad de filas | Interpretación |
|---|---|---|
UNION | 6 | Una fila por ciudad distinta. |
UNION ALL | 14 | Once filas del primer resultado y tres del segundo, incluidas las repeticiones. |
Rendimiento sin sacrificar el significado
UNION necesita comprobar qué filas son iguales para eliminar duplicados. UNION ALL evita esa deduplicación, pero eso no autoriza a usarlo cuando el resultado correcto exige unicidad. Primero define la semántica y después mide el plan real con los datos y el motor utilizados.
Errores frecuentes
Confundir valores repetidos con filas duplicadas
UNION compara la fila completa. Dos filas con la misma ciudad pero distinto identificador no son duplicadas si seleccionas ambas columnas.
Usar UNION para ocultar duplicados de un JOIN
Si una relación multiplica filas de forma inesperada, revisa las claves y la condición ON. Eliminar el síntoma puede producir un resultado aparentemente limpio pero incorrecto.
Práctica guiada
Lista ciudades sin repetir
Devuelve las ciudades que aparecen entre los clientes activos o entre los clientes sin correo. El resultado debe contener una sola fila por ciudad y quedar ordenado alfabéticamente.
activo = 1.email IS NULL.Solución razonada
SELECT ciudad
FROM clientes
WHERE activo = 1
UNION
SELECT ciudad
FROM clientes
WHERE email IS NULL
ORDER BY ciudad;UNION es adecuado porque la tarea pide ciudades únicas. El resultado contiene A Coruña, Bilbao, Madrid, Sevilla, Valencia y Zaragoza.
Compatibilidad
PostgreSQL, MySQL, SQLite, SQL Server y Oracle documentan operaciones de unión de resultados, aunque las reglas de conversión de tipos y el uso de paréntesis con ordenación o límites pueden variar. Mantén el ejemplo inicial en el subconjunto portable y consulta la versión concreta para casos complejos.
Qué debes recordar
UNIONconserva una sola copia de cada fila completa.UNION ALLconserva cada aparición.- Las consultas deben tener columnas compatibles.
- El orden solo queda definido con un
ORDER BYfinal.