Operaciones de conjuntos · decisión práctica

UNION vs UNION ALL

Aprende a decidir si una fila repetida debe desaparecer o conservarse antes de combinar dos resultados.

Lectura: 5–7 minComparación paso a pasoIncluye práctica guiada
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.

Decisión entre UNION y UNION ALL
PreguntaEligeMotivo
¿Necesitas elementos únicos?UNIONElimina filas completas duplicadas.
¿Cada aparición cuenta?UNION ALLConserva el número real de ocurrencias.
¿Los conjuntos no pueden solaparse?UNION ALLNo hace falta pedir una deduplicación innecesaria.
¿No sabes por qué aparecen duplicados?Revisar primeroUna 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í.

SQL
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.

Efecto sobre el resultado del ejemplo
OperaciónCantidad de filasInterpretación
UNION6Una fila por ciudad distinta.
UNION ALL14Once 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

Intermedia · conjuntos

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.

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

  • UNION conserva una sola copia de cada fila completa.
  • UNION ALL conserva cada aparición.
  • Las consultas deben tener columnas compatibles.
  • El orden solo queda definido con un ORDER BY final.

Conceptos relacionados

Fuentes técnicas consultadas