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.
INTconBIGINT,VARCHARconTEXT).
Ejemplo simple de UNION
Tabla clientes_es:
| id | nombre | ciudad |
|---|---|---|
| 1 | Ana | Madrid |
| 2 | Luis | Sevilla |
Tabla clientes_fr:
| id | nombre | ciudad |
|---|---|---|
| 1 | Claire | París |
| 2 | Marc | Lyon |
Consulta:
SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre, ciudad FROM clientes_fr;
Resultado:
| nombre | ciudad |
|---|---|
| Ana | Madrid |
| Luis | Sevilla |
| Claire | París |
| Marc | Lyon |
👉 Combina resultados de dos tablas en una sola lista.
UNION elimina duplicados
Tabla clientes_a:
| nombre | ciudad |
|---|---|
| Ana | Madrid |
| Luis | Sevilla |
Tabla clientes_b:
| nombre | ciudad |
|---|---|
| Ana | Madrid |
| Carla | Valencia |
Consulta:
SELECT nombre, ciudad FROM clientes_a
UNION
SELECT nombre, ciudad FROM clientes_b;
Resultado:
| nombre | ciudad |
|---|---|
| Ana | Madrid |
| Luis | Sevilla |
| Carla | Valencia |
👉 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:
| nombre | ciudad |
|---|---|
| Ana | Madrid |
| Luis | Sevilla |
| Ana | Madrid |
| Carla | Valencia |
👉 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
- Número de columnas distinto
SELECT nombre, ciudad FROM clientes_es
UNION
SELECT nombre FROM clientes_fr; -- ❌ Error
- Tipos de datos incompatibles
👉 No se puede unir una columnaVARCHARcon unaDATEdirectamente. - Aplicar ORDER BY en cada SELECT
👉 Solo se permite unORDER BYal final. - Confundir UNION con UNION ALL
👉UNIONelimina duplicados,UNION ALLlos mantiene.
Buenas prácticas con UNION
- Usar
UNION ALLsi 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
JOINo 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
- Combinar clientes de distintas regiones en una sola lista.
- Unir datos históricos y actuales de diferentes tablas.
- Reportes consolidados que integran varias fuentes.
- Unificar tablas de estructuras similares tras una migración.
- Agregar un campo identificador para distinguir orígenes de datos.
UNION en distintos motores de base de datos
- MySQL / MariaDB → soporte completo de
UNIONyUNION ALL. - PostgreSQL → permite UNION, incluso con columnas calculadas.
- SQL Server → soporte estándar, con
ORDER BYal 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.