Curso
En el universo SQL, la capacidad de combinar datos de varias consultas es un requisito fundamental, y SQL ofrece potentes funciones como UNION y UNION ALL para conseguirlo.
Como verás, comprender las sutiles diferencias entre las funciones UNION y UNION ALL en SQL es imprescindible para consultar y gestionar datos con eficacia. Este tutorial explica sus principales similitudes, diferencias y escenarios de uso utilizando conjuntos de datos complementarios para ayudarte a optimizar tus consultas SQL.
La respuesta breve: SQL UNION vs. UNIÓN TODOS
La diferencia clave es que UNION elimina los registros duplicados, mientras que UNION ALL incluye todos los duplicados. Esta distinción no sólo cambia el número de filas del resultado de la consulta, sino que también afecta al rendimiento.
Consideremos dos tablas de ejemplo, employees_2023 y employees_2024, que representan registros de empleados de dos años diferentes.
SELECT *
FROM employees_2023
|
employee_id |
nombre |
departamento |
|
1 |
Alice |
RRHH |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finanzas |
SELECT *
FROM employees_2024
|
employee_id |
nombre |
departamento |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finanzas |
|
4 |
David |
Marketing |
Ahora, unamos nuestras dos tablas utilizando la función UNION.
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
nombre |
departamento |
|
1 |
Alive |
RRHH |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finanzas |
|
4 |
David |
Marketing |
En este resultado, se eliminan los registros duplicados. Ahora comparemos esto con el resultado que obtenemos tras utilizar UNION ALL.
SELECT employee_id, name, department FROM employees_2023
UNION ALL
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
nombre |
departamento |
|
1 |
Alive |
RRHH |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finanzas |
|
2 |
Bob |
Bob |
|
3 |
Charlie |
Finanzas |
|
4 |
David |
Marketing |
En este resultado, se incluyen todos los registros y no se eliminan los duplicados.
¿Qué es UNION en SQL?
La función UNION combina los resultados de dos o más consultas SELECT en un único conjunto de resultados, eliminando las filas duplicadas. Cada declaración SELECT dentro de UNION debe tener el mismo número de columnas. Además, tienen que tener tipos de datos similares, y las columnas también deben estar en el mismo orden. Para entender la función, vamos a crear a continuación dos tablas de ejemplo.
CREATE TABLE sales_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO support_team (employee_id, employee_name) VALUES
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve');
El código anterior creará las dos tablas que utilizaremos en este tutorial, sales_team y support_team, respectivamente. Puedes ver las tablas utilizando el código que aparece a continuación.
SELECT *
FROM sales_team

Registros de la tabla equipo_de_ventas. Imagen del autor
SELECT *
FROM support_team

Registros de la tabla equipo_soporte. Imagen del autor
Son tablas pequeñas con tres registros cada una, y los nombres de las columnas se explican por sí mismos. Ahora que tenemos nuestras dos tablas creadas, vamos a aplicar la función UNION.
SELECT employee_id, employee_name
FROM sales_team
UNION
SELECT employee_id, employee_name
FROM support_team;

Salida de la función UNIÓN. Imagen del autor
Puedes ver que se elimina la entrada duplicada de employee_id, que toma el valor de 3.
¿Cuáles son los casos de uso de UNION en SQL?
He aquí algunos casos de uso común de la función UNION.
-
Combinar resultados de diferentes tablas: Cuando quieras combinar datos de varias tablas y asegurarte de que no hay registros duplicados,
UNIONes la función a la que debes recurrir. -
Manejo de diferentes fuentes de datos:
UNIONes útil cuando se combinan tablas de diferentes fuentes de datos. -
Eliminar duplicados entre consultas: Cuando quieras garantizar la unicidad del conjunto de resultados combinado, utiliza
UNION.
¿Qué es UNION ALL en SQL?
La función UNION ALL combina los resultados de dos o más consultas SELECT, incluyendo todas las filas duplicadas. Esta función es más rápida que UNION porque no se molesta en eliminar duplicados.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;

Salida de la función UNION ALL. Imagen del autor
Puedes ver que, en este caso, las entradas duplicadas se repiten y no se eliminan.
¿Cuáles son los casos de uso de UNION ALL en SQL?
He aquí algunos casos de uso común de la función UNION ALL.
- Combinar resultados con duplicados: Utiliza
UNION ALLcuando necesites combinar resultados de varias consultas y conservar todas las filas duplicadas. - Consideraciones de rendimiento:
UNION ALLes más eficiente en tiempo que la funciónUNION, porque no requiere el paso adicional de eliminar duplicados. - Agregar datos de distintos periodos: Cuando agregues datos de distintos periodos o fuentes, y necesites conservar las entradas duplicadas, es preferible
UNION ALL. - Informes y análisis: Para los informes en los que se necesitan todos los registros, incluidos los duplicados, es adecuado
UNION ALL.
UNIÓN y UNIÓN TODO: Similitudes y diferencias
Vamos a crear una tabla resumen de las similitudes y diferencias.
|
Función |
UNIÓN |
UNIÓN TODOS |
|
Filas duplicadas |
Eliminado |
Incluye |
|
Rendimiento |
Más lento |
Más rápido |
|
Caso práctico |
Cuando necesites registros únicos |
Cuando necesites todos los registros |
|
Resultado Tamaño |
Más pequeño |
Más grande |
Diferencias sintácticas de UNION y UNION ALL entre dialectos SQL
Aunque la sintaxis básica sigue siendo la misma en los distintos dialectos de SQL, hay ligeras variaciones según la plataforma. Si observas el código, en la mayoría de las plataformas, como SQL Server, Oracle, MySQL, PostgreSQL o BigQuery, el código tendrá un aspecto similar al que se muestra a continuación.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;
Los comandos básicos de estos dialectos SQL siguen siendo los mismos, con algunos matices y diferencias:
- Manejo de NULLs y Colaciones: Los distintos dialectos de SQL pueden tener reglas diferentes para tratar los valores de
NULLy la intercalación de cadenas. - Optimizaciones de rendimiento: Las optimizaciones de rendimiento y la eficacia de ejecución pueden variar.
- Tratamiento de errores y advertencias: Los distintos dialectos pueden tratar los errores y advertencias de forma diferente al utilizar estas funciones.
- Funciones y características específicas de la plataforma: Algunos dialectos SQL pueden ofrecer funciones o características adicionales que pueden utilizarse junto con
UNIONyUNION ALLpara situaciones más complejas.
El comando es significativamente diferente en el caso de PySpark, que funciona en un entorno distribuido. El código es el siguiente, suponiendo que df1 y df2 son los nombres de los dos marcos de datos formados por las dos tablas que hemos creado anteriormente. :
df1.union(df2)
Reflexiones finales
Es esencial comprender la aplicación de UNION frente a UNION ALL en la gestión eficaz de datos mediante SQL. Mientras que UNION sólo selecciona registros distintos, UNION ALL los selecciona todos, lo que afecta al rendimiento y al tamaño del conjunto de resultados. Utiliza estos conocimientos para elegir la función adecuada a tus necesidades específicas.
Para aprender más, considera la posibilidad de explorar las siguientes fuentes:
- Introducción al SQL: Aprende a crear y consultar bases de datos relacionales utilizando SQL.
- Fundamentos de SQL: Adquiere los conocimientos fundamentales de SQL que necesitas para interactuar con tus datos y consultarlos.
- Certificación de Asociado SQL: Demuestra tu habilidad con SQL extrayendo los datos adecuados de una base de datos y utilizándolos para responder a preguntas habituales sobre datos.
- SQL intermedio: Con este curso práctico, aprenderás todo lo que necesitas saber para analizar datos utilizando hoy mismo tu propio código SQL.
Preguntas frecuentes
¿Cuál es la principal diferencia entre SQL UNION y UNION ALL?
UNION elimina los registros duplicados, mientras que UNION ALL incluye todos los duplicados.
¿Hay alguna diferencia de rendimiento entre UNION y UNION ALL?
Sí, UNION suele ser más lento porque elimina los duplicados.
¿Existen casos de uso específicos en los que se prefiera UNION ALL a UNION?
UNION ALL es preferible cuando necesitas todos los registros, incluidos los duplicados, como en informes y análisis.
¿Cuándo debo utilizar SQL UNION en lugar de UNION ALL?
Utiliza UNION cuando necesites un conjunto de resultados combinados sin duplicados.
¿Cómo afectan los distintos dialectos SQL al uso de UNION y UNION ALL?
Aunque la sintaxis básica es coherente, puede haber ligeras variaciones en el rendimiento, el tratamiento de los NULL y la intercalación entre dialectos SQL.
