UNION frente a UNION ALL
Compare la eliminación de duplicados y el rendimiento, y descubra por qué normalmente se pretende usar UNION ALL
UNION frente a UNION ALL es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.
Por qué los entrevistadores preguntan por UNION
Las operaciones de conjuntos apilan verticalmente un conjunto de resultados sobre otro. UNION y UNION ALL son los primeros operadores de conjuntos a los que recurren los entrevistadores, porque la diferencia entre ellos cabe en una sola frase y revela si entiende el coste.
La pregunta casi siempre se formula así: «¿Cuál es la diferencia entre UNION y UNION ALL y cuál debería usar?» Una respuesta sólida menciona de una vez la eliminación de duplicados, el orden y el rendimiento.
Qué hace UNION
UNION combina las filas de dos consultas en un único conjunto de resultados y después elimina las filas duplicadas. Dos filas solo son duplicadas si todas las columnas coinciden.
Para eliminar duplicados, el motor debe ordenar o aplicar hashing a todas las filas combinadas, lo que implica un trabajo real. UNION devuelve un conjunto en el sentido matemático: sin repeticiones.
SELECT city FROM customers
UNION
SELECT city FROM suppliers;Qué hace UNION ALL
UNION ALL concatena los dos conjuntos de resultados y conserva todas las filas, incluidos los duplicados. No realiza ninguna deduplicación, por lo que no ordena ni aplica hashing con ese propósito.
Como omite el paso de deduplicación, UNION ALL casi siempre es más rápido y es la opción correcta cuando sabe que las filas no pueden solaparse o cuando realmente se desean los duplicados.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;La diferencia de rendimiento
La idea clave para la entrevista: UNION ALL es menos costoso porque nunca elimina duplicados. UNION debe comparar todas las filas combinadas para descartar las repeticiones.
UNION= UNION ALL + un paso DISTINCT implícito.- En conjuntos de resultados grandes, ese DISTINCT puede dominar el coste de la consulta.
Si no necesita eliminar duplicados, elegir UNION desperdicia CPU y memoria.
Ejemplo resuelto con duplicados
Suponga que ambas consultas pueden devolver la fila 'Paris'. Con UNION obtiene un único Paris. Con UNION ALL obtiene Paris dos veces.
A los entrevistadores les encanta pedirle que prediga el número de filas. Imagine primero la concatenación sin procesar y después pregúntese: ¿el operador elimina las repeticiones?
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)Los duplicados se definen en todas las columnas
Una trampa común: dos filas solo son duplicadas si todas las columnas seleccionadas son iguales. Añada una columna diferente y las filas dejarán de ser duplicadas, por lo que UNION conservará ambas.
Por eso SELECT id, city suele devolver más filas que SELECT city al usar UNION, incluso con las mismas tablas.
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removedOrdenar el resultado combinado
No puede colocar ORDER BY en las ramas individuales; se aplica al resultado combinado completo y debe aparecer una sola vez, al final.
El entrevistador puede preguntarle dónde va ORDER BY. La respuesta es: un único ORDER BY después de la última consulta, que haga referencia a las columnas de salida por nombre o por posición.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;Los nombres de las columnas provienen de la primera consulta
Cuando haga referencia a columnas en el ORDER BY final, use los nombres (o alias) de la primera consulta SELECT. Los nombres de las columnas de la segunda consulta se ignoran para las etiquetas de salida.
Esto es importante cuando las ramas asignan nombres diferentes a sus columnas. Asigne un alias a la primera rama para controlar el encabezado de salida.
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;Cuándo es apropiado usar UNION
Use UNION solo cuando realmente sea posible que haya filas repetidas y quiera obtener cada fila distinta una sola vez. Ejemplos: combinar dos listas de contactos en las que la misma persona pueda aparecer en ambas, o crear una lista sin duplicados de valores distintos a partir de varias fuentes.
Si puede garantizar que las fuentes son disjuntas, UNION ALL produce el mismo resultado más rápido.
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothCuándo es apropiado usar UNION ALL
Use UNION ALL cuando no puedan producirse duplicados, cuando los duplicados sean significativos o cuando vaya a realizar una agregación después. Un patrón clásico consiste en apilar tablas particionadas por mes que no comparten ninguna fila.
Consejo para entrevistas: indique que UNION ALL es la opción predeterminada y que solo debe cambiar a UNION cuando realmente sea necesaria la eliminación de duplicados.
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;Cómo unir todos los conceptos
Una respuesta pulida en una entrevista sonaría así: "UNION elimina las filas duplicadas, lo que obliga a realizar una ordenación o un hash; UNION ALL conserva todo y es más rápido. Ambos requieren que coincidan el número de columnas y los tipos compatibles, y cualquier ORDER BY se especifica una sola vez al final. Mi opción predeterminada es UNION ALL, a menos que sea necesario eliminar duplicados."
Esta única frase demuestra a la vez corrección y conocimiento del rendimiento.
Comprobación rápida
Compruebe cuánto domina la diferencia entre UNION y UNION ALL.
Resumen
Conclusiones clave:
UNION= combinar y eliminar filas duplicadas (DISTINCT implícito, con un coste adicional).UNION ALL= combinar y conservar todo; es más rápido y la opción predeterminada más sensata.- Para que haya duplicados, deben coincidir todas las columnas.
- Un único
ORDER BYse especifica al final y usa los nombres de las columnas de la primera consulta.
Use UNION ALL de forma predeterminada; cambie a UNION solo cuando realmente sea necesario eliminar duplicados.
Preguntas frecuentes
¿La lección «UNION frente a UNION ALL» es gratis?
Sí — el texto completo de «UNION frente a UNION ALL» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «UNION frente a UNION ALL»?
Compare la eliminación de duplicados y el rendimiento, y descubra por qué normalmente se pretende usar UNION ALL Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Coding Interview Prep?
No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «UNION frente a UNION ALL»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?
Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- UNION frente a UNION ALL
- Compatibilidad de cantidad y tipos de columnas
- INTERSECT y EXCEPT para comparar
- Emular operaciones de conjuntos con joins