En ocasiones, necesitas unir los resultados de varias consultas SELECT
que provienen de diferentes fuentes, tablas o condiciones. Para eso utilizamos la combinación de consultas usando UNION en Oracle, una forma sencilla y potente de combinar múltiples conjuntos de resultados en una sola salida.
En este artículo voy a explicarte cómo funciona UNION
en Oracle, en qué se diferencia de otras variantes como UNION ALL
, y cuándo utilizar cada una. Verás ejemplos reales con alias y buenas prácticas.
¿Qué hace realmente UNION?
La instrucción UNION
en Oracle permite combinar los resultados de dos o más consultas SELECT
que tienen el mismo número y tipo de columnas. El resultado final elimina automáticamente los duplicados, devolviendo solo filas únicas.
SELECT nombre FROM empleados UNION SELECT nombre FROM exempleados;
Esta consulta devuelve una lista unificada con los nombres que aparecen en ambas tablas, sin repeticiones.
Requisitos clave
- Las columnas de cada
SELECT
deben coincidir en número, tipo de dato y orden. - Oracle elimina los duplicados por defecto. Si quieres incluirlos, debes usar
UNION ALL
. - Las cláusulas como
ORDER BY
solo se permiten al final del conjunto completo, no en cadaSELECT
individual.
Sintaxis básica
SELECT columna1, columna2 FROM tabla1 UNION SELECT columna1, columna2 FROM tabla2;
Ejemplo práctico
Supón que tienes estas dos tablas:
CREATE TABLE empleados_activos ( id_empleado NUMBER, nombre VARCHAR2(50) ); CREATE TABLE empleados_inactivos ( id_empleado NUMBER, nombre VARCHAR2(50) );
Y quieres obtener una lista con todos los nombres, tanto activos como inactivos, sin duplicados:
SELECT nombre FROM empleados_activos UNION SELECT nombre FROM empleados_inactivos;
Este resultado contiene solo los nombres distintos de ambas tablas.
¿Y si quiero todos, incluso los duplicados?
Para eso está UNION ALL
. A diferencia de UNION
, no elimina duplicados, lo que la hace más rápida porque evita el paso de ordenamiento y deduplicación.
SELECT nombre FROM empleados_activos UNION ALL SELECT nombre FROM empleados_inactivos;
Este resultado puede incluir nombres repetidos si existen en ambas tablas o dentro de una misma.
¿Cuándo usar UNION y cuándo UNION ALL?
- Usa
UNION
si necesitas eliminar duplicados y tu conjunto de resultados no es muy grande. - Usa
UNION ALL
si quieres máximo rendimiento y no te importa que haya duplicados, o si ya sabes que los datos no se repiten. - Siempre que puedas, filtra o transforma los datos antes de hacer un
UNION
, para evitar procesar información innecesaria.
Cuidado con ORDER BY
Oracle solo permite un ORDER BY
al final de todo el conjunto de resultados, no en cada SELECT
.
Ejemplo correcto:
SELECT nombre FROM empleados_activos UNION SELECT nombre FROM empleados_inactivos ORDER BY nombre;
Ejemplo incorrecto
SELECT nombre FROM empleados_activos ORDER BY nombre UNION SELECT nombre FROM empleados_inactivos;
Combinaciones con más de dos consultas
Puedes encadenar tantas consultas como necesites:
SELECT nombre FROM empleados_2023 UNION SELECT nombre FROM empleados_2022 UNION SELECT nombre FROM empleados_2021;
Ejemplo
Vamos a crear dos tablas: una para los empleados activos y otra para los empleados que ya no están en la empresa, pero cuyos datos queremos seguir considerando en ciertos informes.
CREATE TABLE empleados_activos ( id_empleado NUMBER, nombre VARCHAR2(50) ); CREATE TABLE empleados_inactivos ( id_empleado NUMBER, nombre VARCHAR2(50) );
-- Empleados actualmente activos INSERT INTO empleados_activos VALUES (1, 'Miguel Troyano'); INSERT INTO empleados_activos VALUES (2, 'Laura Núñez'); INSERT INTO empleados_activos VALUES (3, 'Pilar Redondo'); -- Empleados que ya no están en plantilla INSERT INTO empleados_inactivos VALUES (10, 'Ismael Troyano'); INSERT INTO empleados_inactivos VALUES (11, 'Pilar Redondo'); -- También aparece en activos INSERT INTO empleados_inactivos VALUES (12, 'Carlos Ortega');
Y realizamos una consulta para obtener los datos sin duplicados:
SELECT nombre FROM empleados_activos UNION SELECT nombre FROM empleados_inactivos;

Observa que “Pilar Redondo” solo aparece una vez, aunque está en ambas tablas.
Ahora realizamos una consulta para obtener los datos, pero esta vez con duplicados:
SELECT nombre FROM empleados_activos UNION ALL SELECT nombre FROM empleados_inactivos;

En este caso, “Pilar Redondo” aparece dos veces, porque se encuentra en las dos tablas. Esto permite ver la diferencia clara entre ambos comportamientos.
Conclusión
UNION
y UNION ALL
son herramientas muy útiles para combinar resultados de distintas consultas en Oracle. Elegir correctamente entre una y otra puede marcar la diferencia entre una consulta rápida y una que sobrecarga el sistema.
Para más información, puedes consultar la documentación oficial de ORACLE.