UNION vs UNION ALL en SQL: diferencias

Dos resultados SQL combinados con y sin eliminación de duplicados

UNION y UNION ALL en SQL combinan los resultados de dos o más consultas en un único conjunto de filas. La diferencia decisiva es que UNION elimina duplicados, mientras UNION ALL conserva todas las filas. Elegir correctamente afecta tanto al significado del resultado como al trabajo que debe realizar la base de datos.

Requisitos para combinar consultas

Cada SELECT debe devolver el mismo número de columnas y las posiciones correspondientes deben tener tipos compatibles:

SELECT cliente_id, fecha, importe
FROM ventas_2025
UNION ALL
SELECT cliente_id, fecha, importe
FROM ventas_2026;

Los nombres finales suelen proceder del primer SELECT. No importa que las tablas usen el mismo nombre de columna si la posición o el significado no coinciden: alinea explícitamente el esquema.

Qué hace UNION

UNION aplica una operación de conjunto y devuelve filas distintas:

SELECT pais FROM clientes
UNION
SELECT pais FROM proveedores;

Si “España” aparece en ambas consultas o varias veces en una, el resultado incluye una sola fila idéntica. La comparación considera el conjunto completo de columnas seleccionadas, no únicamente la primera.

Eliminar duplicados normalmente exige ordenar, agrupar o utilizar una estructura hash. Ese trabajo puede consumir memoria, CPU y espacio temporal, especialmente con muchas filas o columnas anchas.

Qué hace UNION ALL

UNION ALL concatena resultados sin deduplicarlos:

SELECT pedido_id, "tienda" AS canal FROM pedidos_tienda
UNION ALL
SELECT pedido_id, "web" AS canal FROM pedidos_web;

Suele ser más rápido porque evita la etapa de eliminación. También conserva información que podría ser válida: dos transacciones con los mismos valores visibles no son necesariamente el mismo evento.

Cómo elegir

Empieza por la semántica. Usa UNION cuando el resultado representa un conjunto único y puedes justificar qué significa que dos filas sean duplicadas. Usa UNION ALL cuando apilas particiones mutuamente excluyentes, construyes un histórico o necesitas conservar cada observación.

No elijas UNION para ocultar una unión incorrecta. Si aparecen duplicados inesperados, investiga claves, relaciones y filtros. Deduplicar al final puede enmascarar un problema de calidad y alterar totales.

Ejemplo con fuentes solapadas

Supón que migras pedidos desde un sistema antiguo a otro nuevo y existe un período de convivencia. UNION ALL revelará las filas repetidas; UNION podría eliminarlas solo si todos los campos seleccionados son idénticos. Una estrategia más segura añade la fuente, define una clave de negocio y establece una regla de prioridad:

WITH combinados AS (
  SELECT *, "legado" AS fuente FROM pedidos_legado
  UNION ALL
  SELECT *, "nuevo" AS fuente FROM pedidos_nuevo
)
SELECT *
FROM combinados;

Después puedes auditar solapamientos antes de decidir cuál conservar.

Ordenar el resultado

ORDER BY se coloca una sola vez, después de la última consulta, y se aplica al resultado combinado:

SELECT id, fecha FROM eventos_a
UNION ALL
SELECT id, fecha FROM eventos_b
ORDER BY fecha DESC;

No confíes en el orden físico si no existe un ORDER BY final. Los optimizadores pueden ejecutar ramas en otro orden.

NULL, tipos y conversiones

En operaciones de conjuntos, dos filas con valores NULL en las mismas posiciones pueden considerarse duplicadas a efectos de UNION. Las reglas exactas de conversión de tipos dependen del motor. Evita conversiones implícitas peligrosas: aplica CAST y usa alias para documentar la unidad y el dominio.

UNION frente a JOIN

UNION añade filas; JOIN añade columnas relacionando registros. Si necesitas enriquecer pedidos con datos del cliente, usa JOIN. Si necesitas apilar pedidos de dos regiones con el mismo esquema, usa UNION ALL.

Rendimiento y plan de ejecución

Compara planes reales con datos representativos. Filtra cada rama cuanto antes, selecciona solo las columnas necesarias y revisa si la deduplicación se derrama a disco. Si sabes que los conjuntos no se solapan, UNION ALL comunica esa garantía y evita trabajo innecesario.

En un flujo profesional, valida recuentos por fuente, claves duplicadas y sumas de control antes y después. La consulta más rápida no sirve si cambia el significado de los datos.

Continúa aprendiendo

Amplía este tema con nuestras guías sobre funciones de ventana en SQL, índices de bases de datos, COALESCE en SQL.

Fuentes oficiales

Preguntas frecuentes

¿Cuál es la diferencia entre UNION y UNION ALL?
UNION elimina filas duplicadas del resultado combinado; UNION ALL conserva todas las filas.

¿Cuál suele ser más rápido?
UNION ALL suele requerir menos trabajo porque no ordena ni agrupa para eliminar duplicados.

¿Las consultas necesitan las mismas columnas?
Deben devolver el mismo número de columnas, en posiciones equivalentes y con tipos compatibles.

¿UNION elimina duplicados según una sola columna?
No, compara la fila completa formada por todas las columnas seleccionadas.

¿Dónde se coloca ORDER BY?
Al final de toda la expresión combinada, para ordenar el resultado completo.

¿UNION puede sustituir a JOIN?
No. UNION apila filas compatibles; JOIN relaciona tablas y añade columnas según una condición.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir