El operador UNION se utiliza para combinar los resultados de dos o más consultas SELECT
, eliminando las filas duplicadas en el proceso. Esto significa que si una fila aparece en ambos conjuntos de resultados, solo se incluirá una vez en el conjunto final.
El operador UNION ALL también combina los resultados de dos o más consultas SELECT
, pero a diferencia de UNION, no elimina las filas duplicadas. Esto significa que si una fila aparece varias veces en los conjuntos de resultados originales, aparecerá tantas veces como esté presente en el conjunto final.
La sintaxis básica para usar UNION y UNION ALL es la siguiente:
-- Uso de UNION
SELECT columna1, columna2, ...
FROM tabla1
UNION
SELECT columna1, columna2, ...
FROM tabla2;
-- Uso de UNION ALL
SELECT columna1, columna2, ...
FROM tabla1
UNION ALL
SELECT columna1, columna2, ...
FROM tabla2;
Ambos operadores se colocan entre dos o más sentencias SELECT
que deben devolver el mismo número de columnas con tipos de datos compatibles.
Para ilustrar el uso de UNION y UNION ALL, consideremos dos tablas de ejemplo: Clientes_2023
y Clientes_2024
, que contienen información sobre clientes que realizaron compras en dos años diferentes.
Clientes_2023
:
+------------+-----------+------------+
| cliente_id | nombre | ciudad |
+------------+-----------+------------+
| 1 | Juan | Madrid |
| 2 | María | Barcelona |
| 3 | Luis | Sevilla |
| 4 | Ana | Valencia |
+------------+-----------+------------+
Clientes_2024
:
+------------+-----------+------------+
| cliente_id | nombre | ciudad |
+------------+-----------+------------+
| 2 | María | Barcelona |
| 3 | Luis | Sevilla |
| 5 | Pedro | Bilbao |
| 6 | Marta | Zaragoza |
+------------+-----------+------------+
Para obtener una lista única de todos los clientes que realizaron compras en cualquiera de los dos años, podemos usar el operador UNION:
SELECT cliente_id, nombre, ciudad
FROM Clientes_2023
UNION
SELECT cliente_id, nombre, ciudad
FROM Clientes_2024;
El resultado será:
+------------+-----------+------------+
| cliente_id | nombre | ciudad |
+------------+-----------+------------+
| 1 | Juan | Madrid |
| 2 | María | Barcelona |
| 3 | Luis | Sevilla |
| 4 | Ana | Valencia |
| 5 | Pedro | Bilbao |
| 6 | Marta | Zaragoza |
+------------+-----------+------------+
En este resultado, las filas duplicadas (como el cliente con cliente_id = 2
y cliente_id = 3
) se han eliminado, por lo que solo se muestran una vez.
Si queremos incluir todas las filas, incluidas las duplicadas, podemos usar UNION ALL:
SELECT cliente_id, nombre, ciudad
FROM Clientes_2023
UNION ALL
SELECT cliente_id, nombre, ciudad
FROM Clientes_2024;
El resultado será:
+------------+-----------+------------+
| cliente_id | nombre | ciudad |
+------------+-----------+------------+
| 1 | Juan | Madrid |
| 2 | María | Barcelona |
| 3 | Luis | Sevilla |
| 4 | Ana | Valencia |
| 2 | María | Barcelona |
| 3 | Luis | Sevilla |
| 5 | Pedro | Bilbao |
| 6 | Marta | Zaragoza |
+------------+-----------+------------+
Aquí, las filas duplicadas no se eliminan, por lo que las entradas para María
y Luis
aparecen dos veces en el resultado.
Es crucial que las consultas que uses con UNION y UNION ALL tengan el mismo número de columnas con tipos de datos compatibles y en el mismo orden.
Si estás combinando conjuntos de datos grandes y no necesitas eliminar duplicados, es recomendable usar UNION ALL para mejorar el rendimiento.
Decide si necesitas eliminar duplicados o conservar todas las filas antes de elegir entre UNION y UNION ALL. Usa UNION cuando los duplicados no sean relevantes para tu análisis, y UNION ALL cuando desees preservar todas las instancias.
Los operadores UNION y UNION ALL son herramientas esenciales en SQL para combinar resultados de múltiples consultas. Mientras que UNION es útil para obtener un conjunto de resultados único, UNION ALL conserva todas las filas, incluidas las duplicadas. Conocer las diferencias entre estos dos operadores y cuándo utilizarlos te permitirá optimizar tus consultas y obtener los resultados más relevantes para tus necesidades.
Jorge García
Fullstack developer