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.
Ahora, unamos nuestras dos tablas utilizando la función UNION.
SELECT employee_id, name, department FROM employees_2023
UNIONSELECT employee_id, name, department FROM employees_2024;Con la tecnología de
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
UNIONALLSELECT employee_id, name, department FROM employees_2024;Con la tecnología de
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.
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.
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
UNIONSELECT employee_id, employee_name
FROM support_team;Con la tecnología de
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
UNIONALLSELECT employee_id, employee_name
FROM support_team;Con la tecnología de
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
UNIONALLSELECT employee_id, employee_name
FROM support_team;Con la tecnología de
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 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. :
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 matchSELECT employee_id, name, department
FROM employees_2023
UNIONSELECT employee_id, name
FROM employees_2024;Con la tecnología de
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
UNIONSELECT employee_id, name,NULLas department FROM employees_2024;Con la tecnología de
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
UNIONSELECT name, employee_id FROM employees_2024;Con la tecnología de
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 SYNTAXSELECT employee_id, name FROM employees_2023
ORDERBY employee_id -- You cannot sort here!UNIONSELECT employee_id, name FROM employees_2024;Con la tecnología de
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 SYNTAXSELECT employee_id, name FROM employees_2023
UNIONSELECT employee_id, name FROM employees_2024
ORDERBY employee_id;-- Sorts the final resultCon la tecnología de
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.
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.
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.
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.
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.
En el universo SQL, la capacidad de combinar datos de múltiples consultas es un requisito fundamental, y SQL ofrece potentes funciones como
UNIONyUNION ALLpara lograrlo.Como verás, comprender las sutiles diferencias entre las funciones
UNIONyUNION ALLen 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
UNIONelimina los registros duplicados, mientras queUNION ALLincluye 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.Consideremos dos tablas de muestra,
employees_2023yemployees_2024, que representan los registros de empleados de dos años diferentes.employee_id
nombre
departamento
1
Alicia
RECURSOS HUMANOS
2
Bob
TECNOLOGÍA DE LA INFORMACIÓN
3
Charlie
Finanzas
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.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.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.El código anterior creará las dos tablas que usaremos en este tutorial,
sales_teamysupport_team, respectivamente. Puedes ver las tablas utilizando el código siguiente.Registros en la tabla sales_team. Imagen del autor
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.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 de3.¿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 queUNIONporque no se molesta en eliminar los duplicados.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».UNION ALLcuando necesites combinar los resultados de varias consultas y conservar todas las filas duplicadas.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.UNION ALL».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.
Los comandos básicos en estos dialectos SQL siguen siendo los mismos, con algunos matices y diferencias:
NULL` y la clasificación de cadenas.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
df1ydf2son los nombres de los dos marcos de datos que componen las dos tablas que hemos creado anteriormente. :3 Reglas y errores comunes al usar SQL UNION
Aunque
UNIONyUNION ALLson 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:
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 (comodepartment), puedes seleccionarNULLcomo marcador de posición para que los recuentos coincidan: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.
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 BYantes de la consulta final generará un error de sintaxis.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.Reflexiones finales
Es fundamental comprender la aplicación de
UNIONfrente aUNION ALLpara gestionar datos de forma eficiente utilizando SQL. Mientras queUNIONselecciona solo registros distintos,UNION ALLlos 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: