UNION y UNION ALL en SQL Server: diferencias, ejemplos y ejercicios

Aprendé a combinar resultados de varias tablas con UNION y UNION ALL en SQL Server. Incluye ejemplos con ventas, filtros, columnas de origen y ORDER BY.

Clase del curso SQL: cómo unificar ventas locales y web con UNION y UNION ALL · Ver en YouTube

¿Qué son UNION y UNION ALL en SQL?

En una aplicación real los datos pueden venir de varios puntos de venta: un local físico, una tienda web o una sucursal. Si cada origen tiene su propia tabla, no hace falta hacer una consulta separada para cada una y juntar el resultado a mano. Podés combinarlas desde SQL.

Por ejemplo, si VentasLocal y VentasWeb guardan las mismas columnas, esta consulta muestra todas las ventas en un único resultado:

SELECT
  IdComprador,
  IdVenta,
  Total
FROM VentasLocal

UNION ALL

SELECT
  IdComprador,
  IdVenta,
  Total
FROM VentasWeb;

El resultado tiene una sola tabla de salida, aunque los datos provengan de dos tablas diferentes.

Condiciones para poder usar UNION

Cada SELECT debe devolver:

  • La misma cantidad de columnas.
  • Tipos de datos compatibles en la misma posición.
  • Las columnas en el mismo orden lógico.

No es obligatorio que las columnas tengan el mismo nombre en las tablas originales. Los nombres que verá el resultado final son los del primer SELECT.

Diferencia entre UNION y UNION ALL

OperadorQué devuelveCuándo usarlo
UNION ALLTodas las filas, incluso las repetidasCuando cada registro importa y querés conservarlo tal como viene de cada origen
UNIONUna sola copia de cada fila completamente idénticaCuando necesitás eliminar duplicados del resultado final

UNION compara todas las columnas seleccionadas, no solo una. Dos filas se eliminan como duplicadas únicamente si todos sus valores coinciden.

Como UNION ALL no tiene que buscar y descartar duplicados, suele ser la opción más directa cuando sabés que los registros deben conservarse. No lo elijas por costumbre: primero definí si los repetidos son datos válidos o un problema que querés evitar.

Ejercicio 1: combinar ventas sin eliminar repetidos

Imaginá que querés listar el identificador del comprador, la venta y el total de todos los canales. No importa si una venta de la web coincide en valores con una venta del local: querés ver cada fila.

SELECT
  IdComprador,
  IdVenta,
  Total
FROM VentasLocal

UNION ALL

SELECT
  IdComprador,
  IdVenta,
  Total
FROM VentasWeb;

La palabra ALL es la clave: conserva el 100 % de las filas que devuelven ambas consultas.

Ejercicio 2: identificar el origen, filtrar y ordenar

Ahora vamos a armar un reporte un poco más útil. Queremos mostrar solo las ventas pagadas mayores a 3000, indicar si vienen del local o de la web y ordenarlas de mayor a menor.

Como ninguna tabla tiene una columna Origen, podemos crearla en la consulta con un valor fijo y un alias:

SELECT
  IdComprador,
  IdVenta,
  Total,
  'LOCAL' AS Origen
FROM VentasLocal
WHERE Estado = 'PAGADA'
  AND Total > 3000

UNION ALL

SELECT
  IdComprador,
  IdVenta,
  Total,
  'WEB' AS Origen
FROM VentasWeb
WHERE Estado = 'PAGADA'
  AND Total > 3000

ORDER BY Total DESC;

El WHERE se aplica en cada tabla antes de unir los resultados. En cambio, el ORDER BY va una sola vez al final porque ordena el resultado completo.

¿Cuándo se usa en reportes reales?

Este patrón es común cuando una empresa guarda operaciones similares en tablas separadas: ventas por sucursal, pedidos de distintas plataformas, movimientos históricos y actuales o datos de varios sistemas.

La unión te permite preparar una vista consistente para un reporte sin obligar a quien lo consulta a revisar cada fuente por separado. Después podés combinar este resultado con otros recursos de SQL, como JOIN, CASE WHEN o subqueries, según lo que necesites analizar.

Resumen rápido

  • Usá UNION ALL para unir resultados y conservar todas las filas.
  • Usá UNION para eliminar solo las filas completamente idénticas.
  • Seleccioná explícitamente columnas compatibles y en el mismo orden.
  • Filtrá cada SELECT con WHERE y ordená el resultado final con un único ORDER BY.

Con estos operadores ya podés unificar información de varios orígenes y preparar reportes más claros. El siguiente paso es practicar consultas que mezclen estas ideas con JOIN, CASE y subconsultas.

En este artículo