Tema SQL
UNION / UNION ALL
Apila verticalmente los resultados de varios SELECT con el mismo número de columnas y tipos compatibles. UNION quita duplicados; UNION ALL conserva todas las filas y suele ser más barato.
Descripción
Combina conjuntos de filas de consultas distintas en un solo resultado. UNION realiza un paso extra de deduplicación (a menudo ordenación o hash); UNION ALL evita ese coste cuando sabes que no hay solapamiento o cuando los duplicados son aceptables. Los nombres de columnas del resultado suelen tomarse del primer SELECT; alinea tipos o usa CAST explícito. No sustituye a JOIN: UNION concatena filas, JOIN amplía columnas de la misma fila lógica.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT columnas FROM tabla_a
UNION [ ALL ]
SELECT columnas FROM tabla_b;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- UNION
- Une resultados y elimina filas idénticas en todas las columnas del SELECT. Útil cuando necesitas un conjunto único de valores combinados.
- UNION ALL
- Concatena sin eliminar repetidos; preferible cuando la unicidad ya está garantizada o el volumen es alto.
- Compatibilidad de columnas
- Mismo número de expresiones en cada SELECT y tipos convertibles implícitamente; el motor puede rellenar nombres o tipos según el primero.
Ejemplos
Ejemplo 1
SELECT email FROM clientes
UNION
SELECT email FROM newsletter;
Ejemplo 2
SELECT 'a' AS t
UNION ALL
SELECT 'b';
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.