UNION vs UNION ALL en SQL

UNION y UNION ALL son operadores en SQL que permiten combinar los resultados de dos o más consultas SELECT. La principal diferencia entre ellos es cómo manejan los duplicados:

  • UNION elimina automáticamente las filas duplicadas en el resultado combinado, dejando solo filas únicas. Es útil cuando necesitas evitar datos repetidos.
  • UNION ALL incluye todos los resultados, incluso los duplicados, lo que lo hace más rápido y eficiente en rendimiento.

Ambos son ideales para trabajar con datos distribuidos en múltiples tablas o consultas, pero elegir el adecuado depende de si los duplicados son relevantes para tu caso.

¿Qué es UNION en SQL?

UNION es un operador en SQL que permite combinar los resultados de dos o más consultas SELECT en una sola lista. Este operador elimina automáticamente los duplicados de los resultados, asegurándose de que cada fila sea única en el resultado combinado.

Sintaxis

sql
SELECT columna1, columna2, ...
FROM tabla1

UNION

SELECT columna1, columna2, ...
FROM tabla2;
  Reglas para usar UNION

  • Cada consulta SELECT debe tener el mismo número de columnas.
  • Las columnas deben tener tipos de datos compatibles.
  • El orden de las columnas debe ser el mismo en todas las consultas.

Ejemplo práctico


Tablas de ejemplo:

Tabla empleados_tiempo_completo:

idnombredepartamento
1AnaVentas
2JuanIT

Tabla empleados_tiempo_parcial:

idnombredepartamento
3PedroVentas
2JuanIT

Consulta:

sql
SELECT nombre, departamento
FROM empleados_tiempo_completo

UNION

SELECT nombre, departamento
FROM empleados_tiempo_parcial;

Resultado:

nombredepartamento
AnaVentas
JuanIT
PedroVentas

En este caso, el operador UNION elimina la fila duplicada de “Juan”.

  ¿Cuáles son los casos de uso de UNION en SQL?

  • Combinar datos de múltiples tablas que tienen esquemas similares.
  • Generar informes consolidados, como listas de empleados de diferentes tipos de contrato.
  • Integrar resultados de consultas complejas que comparten el mismo propósito.

¿Qué es UNION ALL en SQL?

UNION ALL es similar a UNION, pero no elimina los duplicados. Este operador incluye todas las filas de las consultas, incluso si son repetidas.

Sintaxis

sql
SELECT columna1, columna2, ...
FROM tabla1

UNION ALL

SELECT columna1, columna2, ...
FROM tabla2;

Ejemplo práctico


Consulta:

sql
SELECT nombre, departamento
FROM empleados_tiempo_completo

UNION ALL

SELECT nombre, departamento
FROM empleados_tiempo_parcial;

Resultado:

nombredepartamento
AnaVentas
JuanIT
PedroVentas
JuanIT

En este caso, el operador UNION ALL no elimina duplicados y muestra todas las filas.

  Casos de uso de UNION ALL en SQL

  • Cuando necesitas incluir todas las filas, incluso las duplicadas, para análisis detallado.
  • Al realizar auditorías o seguimiento donde los duplicados son importantes.
  • En escenarios donde la eliminación de duplicados no es necesaria, ya que UNION ALL es más rápido que UNION al evitar la operación de comparación de duplicados.

Tabla de diferencias

CaracterísticaUNIONUNION ALL
Elimina duplicadosNo
VelocidadMás lento (por eliminación de duplicados)Más rápido (sin eliminación de duplicados)
Uso principalObtener datos únicosIncluir todos los datos

Eliminar duplicados con UNION entre tablas 🚀

En SQL, el operador UNION combina los resultados de varias consultas y elimina automáticamente los registros duplicados, manteniendo solo valores únicos. 🚀

sql
SELECT departamento
FROM empleados_tiempo_completo

UNION

SELECT departamento
FROM empleados_tiempo_parcial;

Resultado:

departamento
Ventas
IT

Incluir duplicados con UNION ALL entre tablas 🚀

En SQL, UNION ALL combina los resultados de múltiples consultas sin eliminar duplicados, lo que mejora el rendimiento al incluir todos los registros, incluso los repetidos.

sql
SELECT departamento
FROM empleados_tiempo_completo

UNION ALL

SELECT departamento
FROM empleados_tiempo_parcial;

Resultado:

departamento
Ventas
IT
Ventas
IT

Combinando UNION ALL con subconsultas y filtros en SQL 🚀

Este ejemplo muestra cómo utilizar UNION ALL dentro de una subconsulta y aplicar filtros para obtener resultados específicos, como los empleados del departamento de ventas.

sql
SELECT *
FROM (
  SELECT nombre, departamento
  FROM empleados_tiempo_completo

  UNION ALL

  SELECT nombre, departamento
  FROM empleados_tiempo_parcial
) subquery
WHERE departamento = 'Ventas';