Contenido de esta guía
Qué hace UNION
UNION coloca las filas de una consulta debajo de las filas de otra. Después elimina las filas completas repetidas.
Es útil para reunir datos de fuentes o condiciones distintas cuando todos los resultados representan la misma clase de información.
Tres requisitos antes de combinar
- Cada SELECT debe devolver el mismo número de columnas.
- Las columnas situadas en la misma posición deben tener tipos compatibles.
- Cada posición debe expresar la misma idea: nombre con nombre, fecha con fecha, importe con importe.
SELECT columna_1, columna_2
FROM primera_fuente
UNION
SELECT columna_1, columna_2
FROM segunda_fuente;Los nombres de columnas del resultado suelen tomarse del primer SELECT. Si necesitas ordenar, coloca un único ORDER BY al final del conjunto.
Ejemplo guiado
Queremos una lista única de categorías que tienen productos sin stock o productos con precio superior a 200:
SELECT categoria AS etiqueta
FROM productos
WHERE stock = 0
UNION
SELECT categoria AS etiqueta
FROM productos
WHERE precio > 200
ORDER BY etiqueta;| etiqueta |
|---|
| Audio |
| Ordenadores |
| Pantallas |
«Ordenadores» cumple las dos condiciones, pero aparece una sola vez. Esa eliminación de duplicados es la diferencia principal frente a UNION ALL.
UNION o UNION ALL
Usa UNION cuando una fila repetida no aporta información nueva y necesitas un conjunto único. Usa UNION ALL cuando quieres conservar todas las apariciones o ya sabes que los bloques no se solapan. Evitar la deduplicación puede reducir trabajo.
Error frecuente
Combinar columnas compatibles pero sin significado común
Que un identificador y una cantidad sean números no significa que deban ocupar la misma columna. Define primero qué representa cada posición del resultado y utiliza alias claros.
Comprueba lo aprendido
Reúne ciudades con clientes activos o con pedidos
Devuelve una lista alfabética y sin duplicados de ciudades que tengan al menos un cliente activo o un cliente que haya realizado un pedido.
clientes y filtra activo = 1.clientes con pedidos.ciudad en ambos y ordena al final.Solución razonada
SELECT ciudad
FROM clientes
WHERE activo = 1
UNION
SELECT c.ciudad
FROM clientes AS c
JOIN pedidos AS p ON p.cliente_id = c.id
ORDER BY ciudad;| ciudad |
|---|
| A Coruña |
| Bilbao |
| Madrid |
| Sevilla |
| Valencia |
| Zaragoza |
UNION reúne ambas procedencias y conserva cada ciudad una sola vez.
Combina entidades distintas con una estructura común
Crea una lista única con dos columnas: etiqueta y origen. Incluye los clientes de Madrid marcados como 'cliente' y los productos con precio inferior a 30 marcados como 'producto'. Ordena por etiqueta y después por origen.
Criterio de éxito: ambos SELECT deben devolver exactamente dos columnas compatibles y el resultado final debe contener seis filas, desde Ana Torres · cliente hasta Ratón · producto.
SELECT sale de clientes y puede usar nombre AS etiqueta.'cliente' y 'producto'.ORDER BY etiqueta, origen después del segundo SELECT.Solución razonada
SELECT nombre AS etiqueta, 'cliente' AS origen
FROM clientes
WHERE ciudad = 'Madrid'
UNION
SELECT nombre, 'producto'
FROM productos
WHERE precio < 30
ORDER BY etiqueta, origen;| etiqueta | origen |
|---|---|
| Ana Torres | cliente |
| Cable USB-C | producto |
| Marta Ruiz | cliente |
| Noa Vidal | cliente |
| Pablo Sanz | cliente |
| Ratón | producto |
UNION puede combinar fuentes distintas siempre que cada consulta produzca el mismo número de columnas y tipos compatibles. El alias del primer SELECT da nombre a la primera columna del resultado compuesto.
Compatibilidad entre motores
UNION está ampliamente disponible. Los detalles sobre conversiones de tipo, ordenación, límites y paréntesis pueden variar. Cuando los SELECT son complejos, prueba cada bloque por separado antes de unirlos.
Qué debes recordar
- UNION apila resultados compatibles.
- Elimina filas completas duplicadas.
- ORDER BY se aplica al resultado combinado.
- UNION ALL conserva todas las apariciones.
Conceptos relacionados
Fuentes técnicas
La explicación se ha contrastado con documentación oficial: