Curso
En el universo SQL, la capacidad de combinar datos de múltiples consultas es un requisito fundamental, y SQL ofrece potentes funciones como UNION y UNION ALL para lograrlo.
Como verás, comprender las sutiles diferencias entre las funciones UNION y UNION ALL en SQL es imprescindible para realizar consultas y gestionar datos de forma eficiente. 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 corta: SQL UNION frente a UNIÓN DE TODOS
La diferencia clave es que UNION elimina los registros duplicados, mientras que UNION ALL incluye todos los duplicados. Esta distinción no solo cambia el número de filas en el resultado de la consulta, sino que también afecta al rendimiento.
| Característica | UNIÓN | UNIÓN DE TODOS |
|---|---|---|
| Duplicados | Elimina los registros duplicados. | Conserva todos los registros (incluidos los duplicados). |
| Rendimiento | Más lento (debes ordenar/hash los datos para encontrar duplicados) | Más rápido (simplemente añade datos al resultado) |
| Operación | Teoría de conjuntos (Unión Matemática) | Anexar/Apilar resultados |
Consideremos dos tablas de muestra, employees_2023 y employees_2024, que representan los registros de empleados de dos años diferentes.
SELECT *
FROM employees_2023
|
employee_id |
nombre |
departamento |
|
1 |
Alicia |
RECURSOS HUMANOS |
|
2 |
Bob |
TECNOLOGÍA DE LA INFORMACIÓN |
|
3 |
Charlie |
Finanzas |
SELECT *
FROM employees_2024
|
employee_id |
nombre |
departamento |
|
2 |
Bob |
TECNOLOGÍA DE LA INFORMACIÓN |
|
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 |
Alicia |
RECURSOS HUMANOS |
|
2 |
Bob |
TECNOLOGÍA DE LA INFORMACIÓN |
|
3 |
Charlie |
Finanzas |
|
4 |
David |
Marketing |
En este resultado, se eliminan los registros duplicados. Ahora, comparemos esto con el resultado que obtenemos después de usar 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 |
Vivo |
RECURSOS HUMANOS |
|
2 |
Bob |
TECNOLOGÍA DE LA INFORMACIÓN |
|
3 |
Charlie |
Finanzas |
|
2 |
Bob |
TECNOLOGÍA DE LA INFORMACIÓN |
|
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 instrucción « SELECT » dentro de « UNION » debe tener el mismo número de columnas. Además, deben tener tipos de datos similares y las columnas deben estar en el mismo orden. Para comprender la función, creemos dos tablas de ejemplo a continuación.
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 usaremos en este tutorial, sales_team y support_team, respectivamente. Puedes ver las tablas utilizando el código siguiente.
SELECT *
FROM sales_team

Registros en la tabla sales_team. Imagen del autor
SELECT *
FROM support_team

Registros en la tabla support_team. 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 ya tenemos nuestras dos tablas creadas, apliquemos la función UNION.
SELECT employee_id, employee_name
FROM sales_team
UNION
SELECT employee_id, employee_name
FROM support_team;

Resultado de la función UNION. Imagen del autor
Puedes ver que se ha eliminado la entrada duplicada de employee_id, que toma el valor de 3.
¿Cuáles son los casos de uso de UNION en SQL?
A continuación se muestran algunos casos de uso habituales de la función « UNION ».
-
Combinación de resultados de diferentes tablas: Cuando quieras combinar datos de varias tablas y asegurarte de que no haya registros duplicados, la función «
UNION» es la más adecuada. -
Manejo de diferentes fuentes de datos:
UNIONes útil cuando se combinan tablas de diferentes fuentes de datos. -
Eliminación de duplicados en las consultas: Cuando quieras garantizar la unicidad del conjunto de resultados combinados, utiliza
UNION.
¿Qué es UNION ALL en SQL?
La función « UNION ALL » combina los resultados de dos o más consultas « SELECT », incluidas todas las filas duplicadas. Esta función es más rápida que UNION porque no se molesta en eliminar los duplicados.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;

Resultado 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?
A continuación se muestran algunos casos de uso habituales de la función « UNION ALL ».
- Combinación de resultados con duplicados: Utiliza
UNION ALLcuando necesites combinar los resultados de varias consultas y conservar todas las filas duplicadas. - Consideraciones sobre el rendimiento: La función `
UNION ALL` es más eficiente en términos de tiempo que la función `UNION`, ya que no requiere el paso adicional de eliminar duplicados. - Agregación de datos de diferentes períodos: Cuando se agregan datos de diferentes períodos o fuentes y necesitas conservar las entradas duplicadas, es preferible utilizar la función «
UNION ALL». - Informes y análisis: Para fines informativos en los que es necesario incluir todos los registros, incluidos los duplicados, el formato «
UNION ALL» (todos los registros) es el más adecuado.
UNION y UNION ALL: Similitudes y diferencias
Creemos una tabla resumen con las similitudes y diferencias.
|
Característica |
UNIÓN |
UNIÓN DE TODOS |
|
Filas duplicadas |
Eliminado |
Incluido |
|
Rendimiento |
Más lento |
Más rápido |
|
Caso de uso |
Cuando necesitas registros únicos |
Cuando necesitas todos los registros |
|
Tamaño del resultado |
Más pequeño |
Más grande |
Diferencias sintácticas entre UNION y UNION ALL en los distintos dialectos SQL
Aunque la sintaxis básica es la misma en los diferentes dialectos SQL, existen ligeras variaciones dependiendo de 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 será 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 en estos dialectos SQL siguen siendo los mismos, con algunos matices y diferencias:
- Manejo de valores NULL y colaciones: Los diferentes dialectos SQL pueden tener reglas diferentes para manejar los valores de tipo `
NULL` y la clasificación de cadenas. - Optimizaciones del rendimiento: Las optimizaciones del rendimiento y la eficiencia de ejecución pueden variar.
- Gestión de errores y advertencias: Los distintos dialectos pueden gestionar los errores y las 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 se pueden utilizar junto con
UNIONyUNION ALLpara escenarios más complejos.
El comando es significativamente diferente en el caso de PySpark, que opera en un entorno distribuido. El código se muestra a continuación, suponiendo que df1 y df2 son los nombres de los dos marcos de datos que componen las dos tablas que hemos creado anteriormente. :
df1.union(df2)
3 Reglas y errores comunes al usar SQL UNION
Aunque UNION y UNION ALL son potentes, son estrictos en cuanto a la sintaxis. Si tu consulta devuelve un error, es probable que esté infringiendo una de estas tres reglas de oro.
1. La discrepancia en el recuento de columnas
El error más común que encuentran los usuarios es una discrepancia en el número de columnas. Para combinar dos conjuntos de datos, la «forma» de las tablas debe ser idéntica. No puedes apilar una tabla de 3 columnas sobre una tabla de 2 columnas.
El error:
-- This will fail because the column counts do not match
SELECT employee_id, name, department
FROM employees_2023
UNION
SELECT employee_id, name
FROM employees_2024;
La solución: Asegúrate de que ambas instrucciones ` SELECT ` soliciten exactamente el mismo número de columnas. Si la segunda tabla tiene datos faltantes (como department), puedes seleccionar NULL como marcador de posición para que los recuentos coincidan:
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;
2. Compatibilidad de tipos de datos
SQL combina los resultados basándose en la posición, no en el nombre de la columna. El tipo de datos de la primera columna de la primera consulta debe coincidir (o ser compatible) con el tipo de datos de la primera columna de la segunda consulta.
El error: Si accidentalmente intercambias el orden de las columnas, SQL intenta apilar un número (ID) sobre una cadena (nombre), lo que provoca un error de conversión de tipo de datos.
-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;
La solución: Verifica siempre que tus columnas aparezcan en el mismo orden en todas las instrucciones ` SELECT ` dentro de la ` UNION`.
3. Limitaciones de ORDER BY
Un punto que suele generar confusión es dónde colocar la cláusula « ORDER BY » (a menos que). No puedes ordenar las subconsultas individuales dentro de una operación « UNION »; solo puedes ordenar el resultado combinado final.
El error: El uso de ORDER BY antes de la consulta final generará un error de sintaxis.
-- INCORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
ORDER BY employee_id -- You cannot sort here!
UNION
SELECT employee_id, name FROM employees_2024;
La solución: Coloca la cláusula « ORDER BY » al final de tu consulta. Esto aplica la ordenación a todo el conjunto de resultados combinados.
-- CORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Sorts the final result
Reflexiones finales
Es fundamental comprender la aplicación de UNION frente a UNION ALL para gestionar datos de forma eficiente utilizando SQL. Mientras que UNION selecciona solo registros distintos, UNION ALL los selecciona todos, lo que afecta al rendimiento y al tamaño del conjunto de resultados. Utiliza este conocimiento para elegir la función adecuada a tus necesidades específicas.
Para ampliar tus conocimientos, te recomendamos que consultes las siguientes fuentes:
- Introducción a SQL: Aprende a crear y consultar bases de datos relacionales utilizando SQL.
- Fundamentos de SQL: Adquiere los conocimientos básicos de SQL que necesitas para interactuar con tus datos y realizar consultas.
- Certificación SQL Associate: Demuestra tus habilidades con SQL extrayendo los datos adecuados de una base de datos y utilizándolos para responder a preguntas comunes sobre datos.
- SQL intermedio: Con este curso práctico, aprenderás todo lo que necesitas saber para analizar datos utilizando tu propio código SQL hoy mismo.

Profesional experimentado en Ciencia de Datos, Inteligencia Artificial, Analítica y Funciones Estratégicas con más de 18 años de experiencia en las áreas de -: Ciencia de datos, ML e IA ~ Ciencia de datos, Aprendizaje automático supervisado y no supervisado, Aprendizaje profundo, Modelado predictivo, Procesamiento del lenguaje natural (NLP), Modelado y análisis estadístico, Optimización, Estrategia empresarial y Analítica ~ Desarrollo y evaluación de modelos empresariales, Analítica descriptiva y de diagnóstico, EDA, Visualización, Análisis de causa raíz, Análisis de sensibilidad y de escenarios.
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.
¿Existe alguna diferencia de rendimiento entre UNION y UNION ALL?
Sí, UNION suele ser más lento porque elimina los duplicados.
¿Existen casos específicos en los que sea preferible utilizar UNION ALL en lugar de UNION?
UNION ALL Es preferible cuando necesitas todos los registros, incluidos los duplicados, como en los informes y análisis.
¿Cuándo debes usar SQL UNION en lugar de UNION ALL?
Utiliza UNION cuando necesites un conjunto de resultados combinados sin duplicados.
¿Cómo afectan los diferentes dialectos SQL al uso de UNION y UNION ALL?
Aunque la sintaxis básica es coherente, puede haber ligeras variaciones en el rendimiento, el manejo de valores NULL y la colación entre los distintos dialectos SQL.
