Ir al contenido principal

UNION frente a UNION ALL en SQL

Descubre las diferencias de rendimiento y resultados entre UNION y UNION ALL: UNION elimina los duplicados, mientras que UNION ALL los incluye.
Actualizado 15 ene 2026  · 8 min leer

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 el <code624

Registros en la tabla sales_team. Imagen del autor 

SELECT * 
FROM support_team

Registros en el <code624

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;

Salida de <code624

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: UNION es ú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;

Salida de <code624

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 ALL cuando 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:

  1. 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.
  2. Optimizaciones del rendimiento: Las optimizaciones del rendimiento y la eficiencia de ejecución pueden variar.
  3. Gestión de errores y advertencias: Los distintos dialectos pueden gestionar los errores y las advertencias de forma diferente al utilizar estas funciones.
  4. 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 UNION y UNION ALL para 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.

Vikash Singh's photo
Author
Vikash Singh
LinkedIn

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.

Temas

Aprende SQL con DataCamp

Curso

Manipulación de datos en SQL

4 h
306.9K
Domina las consultas SQL para responder a preguntas de ciencia de datos y prepara conjuntos de datos para analizarlos en PostgreSQL.
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

Tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

Tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

Tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

Tutorial

Cómo utilizar la función COALESCE() en SQL (con ejemplos)

Aprende a utilizar la función COALESCE() de SQL para tratar valores nulos, combinar columnas y limpiar tus datos con ejemplos y consejos reales.
Travis Tang 's photo

Travis Tang

Tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

Tutorial

Comprender la función DECODE() de SQL

Aprende a utilizar DECODE() en Oracle para la lógica condicional en la transformación de datos. Compara DECODE() con la sentencia CASE WHEN en cuanto a rendimiento y comportamiento.
Allan Ouko's photo

Allan Ouko

Ver másVer más