UNION en SQL: qué es, cómo funciona y ejemplos prácticos

El operador UNION en SQL permite combinar los resultados de dos o más consultas SELECT en un solo conjunto de resultados.
La condición es que las consultas tengan el mismo número de columnas y que las columnas correspondan a tipos de datos compatibles.

👉 Por defecto, UNION elimina los duplicados.
👉 Si se quiere mantenerlos, se usa UNION ALL.

Sintaxis básica de UNION

SELECT columna1, columna2, ...
FROM tabla1
UNION
SELECT columna1, columna2, ...
FROM tabla2;

Reglas importantes:

  • Cada consulta debe devolver el mismo número de columnas.
  • El orden de las columnas debe coincidir.
  • Los tipos de datos deben ser compatibles (ej. INT con BIGINT, VARCHAR con TEXT).

Ejemplo simple de UNION

Tabla clientes_es:

idnombreciudad
1AnaMadrid
2LuisSevilla

Tabla clientes_fr:

idnombreciudad
1ClaireParís
2MarcLyon

Consulta:

SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre, ciudad FROM clientes_fr;

Resultado:

nombreciudad
AnaMadrid
LuisSevilla
ClaireParís
MarcLyon

👉 Combina resultados de dos tablas en una sola lista.

UNION elimina duplicados

Tabla clientes_a:

nombreciudad
AnaMadrid
LuisSevilla

Tabla clientes_b:

nombreciudad
AnaMadrid
CarlaValencia

Consulta:

SELECT nombre, ciudad FROM clientes_a
UNION
SELECT nombre, ciudad FROM clientes_b;

Resultado:

nombreciudad
AnaMadrid
LuisSevilla
CarlaValencia

👉 Ana - Madrid aparece solo una vez, aunque estaba en ambas tablas.

UNION ALL: mantener duplicados

SELECT nombre, ciudad FROM clientes_a
UNION ALL
SELECT nombre, ciudad FROM clientes_b;

Resultado:

nombreciudad
AnaMadrid
LuisSevilla
AnaMadrid
CarlaValencia

👉 Con UNION ALL, los duplicados se mantienen.

Ejemplo con más de dos SELECT

SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre, ciudad FROM clientes_fr
UNION
SELECT nombre, ciudad FROM clientes_it;

👉 Se pueden unir múltiples consultas en una sola salida.

Ejemplo práctico: informes combinados

Supongamos que tenemos una tabla de ventas_online y otra de ventas_tienda.

SELECT id, total, 'Online' AS canal
FROM ventas_online
UNION
SELECT id, total, 'Tienda' AS canal
FROM ventas_tienda;

👉 Devuelve todas las ventas con una columna adicional que indica el canal.

Ejemplo de UNION con ORDER BY

El ORDER BY debe aplicarse al final de todo el conjunto:

SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre, ciudad FROM clientes_fr
ORDER BY nombre;

👉 Ordena el conjunto resultante completo, no cada consulta por separado.

Diferencias entre UNION y JOIN

  • UNION: combina resultados de varias consultas verticalmente (una lista debajo de otra).
  • JOIN: combina tablas horizontalmente, uniendo columnas según una condición.

Ejemplo de diferencia:

  • UNION: “dame todos los clientes de España y Francia en una sola lista”.
  • JOIN: “dame clientes que hicieron pedidos y sus pedidos asociados”.

Errores comunes con UNION

  1. Número de columnas distinto
SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre FROM clientes_fr; -- ❌ Error
  1. Tipos de datos incompatibles
    👉 No se puede unir una columna VARCHAR con una DATE directamente.
  2. Aplicar ORDER BY en cada SELECT
    👉 Solo se permite un ORDER BY al final.
  3. Confundir UNION con UNION ALL
    👉 UNION elimina duplicados, UNION ALL los mantiene.

Buenas prácticas con UNION

  • Usar UNION ALL si se necesitan duplicados o si no importa y se busca mejor rendimiento.
  • Confirmar que las columnas sean compatibles en tipo y orden.
  • Aplicar alias claros cuando se agregan columnas calculadas.
  • Evitar mezclar demasiadas consultas si se puede resolver con JOIN o normalización de tablas.
  • En casos con duplicados, considerar también el uso de DISTINCT.
  • Recordar que se pueden aplicar filtros en cada consulta con WHERE.

Casos de uso de UNION

  1. Combinar clientes de distintas regiones en una sola lista.
  2. Unir datos históricos y actuales de diferentes tablas.
  3. Reportes consolidados que integran varias fuentes.
  4. Unificar tablas de estructuras similares tras una migración.
  5. Agregar un campo identificador para distinguir orígenes de datos.

UNION en distintos motores de base de datos

  • MySQL / MariaDB → soporte completo de UNION y UNION ALL.
  • PostgreSQL → permite UNION, incluso con columnas calculadas.
  • SQL Server → soporte estándar, con ORDER BY al final.
  • Oracle → soporta UNION, pero puede requerir alias adicionales en columnas calculadas.
  • SQLite → soporta UNION y UNION ALL.

Preguntas frecuentes (FAQ)

1. ¿UNION elimina duplicados automáticamente?
Sí, siempre. Si querés mantenerlos, usá UNION ALL.

2. ¿Se puede usar ORDER BY en cada consulta dentro del UNION?
No, solo al final de la consulta global.

3. ¿Se pueden unir consultas con distinto número de columnas?
No, debe coincidir la cantidad y el tipo de datos.

4. ¿Qué es más rápido: UNION o UNION ALL?
UNION ALL es más rápido porque no elimina duplicados.

5. ¿Se puede usar UNION con subqueries?
Sí, mientras cumplan las reglas de columnas y tipos compatibles.

Conclusión

El operador UNION en SQL es fundamental para:

  • Combinar resultados de varias consultas en un solo conjunto.
  • Generar reportes unificados.
  • Consolidar información de diferentes tablas o fuentes.

Es una herramienta poderosa en el análisis de datos y la construcción de reportes, especialmente cuando se trabaja con múltiples fuentes que tienen estructuras similares.

Refuerza operaciones de conjuntos junto a SELECT en SELECT y FROM y consulta el Glosario SQL completo.

Scroll al inicio