SQL Server Union vs Union All

Unión y Unión Todos se utilizan para combinar dos o más conjuntos de resultados en SQL. Un operador de conjunto de unión es diferente de las uniones SQL. Union combina dos conjuntos, mientras que las uniones SQL combinan dos o más columnas basadas en una condición de fila coincidente. Este tutorial describe las diferencias entre Union y Union All según la función y el rendimiento.

Unión de todos

1. Union All se utiliza para combinar dos o más conjuntos de resultados como un conjunto de resultados.
2. Union All incluye duplicados de dos o más conjuntos de resultados.

Unión

1. Unión se utiliza para combinar dos o más conjuntos de resultados como un conjunto de resultados.
2. Unión elimina duplicados de dos o más conjuntos de resultados.
3. La unión también clasifica los conjuntos de resultados en orden ascendente.

Ejemplo: Union vs Union All

CREAR TABLA dbo.Batsman (PK_Batman_Id INT, nombre VARCHAR (255)); CREAR TABLA dbo.Bowler (PK_Bowler_Id INT, nombre VARCHAR (255)); Insertar en dbo.Batsman VALUES (1, 'Sachin Tendulkar'); Insertar en dbo.Batsman VALUES (2, 'Rahul Dravid'); Insertar en dbo.Batsman VALUES (3, 'Brian Lara'); Insertar en dbo.Batsman VALUES (4, 'MS Dhoni'); Insertar en dbo.Bowler VALUES (1, 'Sachin Tendulkar'); Insertar en dbo.Bowler VALUES (2, 'Rahul Dravid'); SELECT * FROM Batsman; SELECT * FROM Bowler; 

Unión de todo el conjunto de operaciones

SELECCIONE Nombre como Jugador DESDE dbo.Batsman UNION ALL SELECCIONE Nombre como Jugador DESDE dbo.Bowler; 
Resultado Jugador ------------------- Sachin Tendulkar Rahul Dravid Brian Lara MS Dhoni Sachin Tendulkar Rahul Dravid (6 fila (s) afectadas) 

La consulta anterior combina dos conjuntos de resultados de las tablas dbo.Batsman y dbo.Bowler y muestra nombres duplicados que aparecen en ambas tablas.

Operación de la Unión

SELECCIONE Nombre como Jugador DESDE dbo.Batsman UNION SELECCIONE Nombre como Jugador DESDE dbo.Bowler; 
Resultado Jugador ------------------- Brian Lara MS Dhoni Rahul Dravid Sachin Tendulkar (4 fila (s) afectadas) 

La consulta anterior combina dos conjuntos de resultados de las tablas dbo.Batsman y dbo.Bowler sin duplicados, y el resultado se ordena en orden ascendente.

Performance: Union vs Union All

Como puede ver, Union All utiliza el 27% de la ejecución por lotes y Union utiliza el 73% de la ejecución por lotes.

En este caso, Union All es más rápido que Union All porque Union All no elimina duplicados y ordena el conjunto de resultados, mientras que Union elimina duplicados y ordena el conjunto de resultados (que necesita más tiempo y un impacto de rendimiento). El operador de ordenamiento distinto en el plan de ejecución muestra que Unión hace la clasificación del conjunto de entrada.

Mejores prácticas

Cuando sabemos que los registros duplicados no son posibles en uno o más conjuntos, usar Union All over Union es beneficioso para evitar un impacto en el rendimiento.