En ocasiones tenemos que escribir un SELECT que tiene una cláusula WHERE muy compleja, está llena de condiciones, de AND, de OR, y entender lo que hace nos resulta bastante complicado. Una forma de facilitar la lectura es usando la cláusula UNION.

Usando UNION es similar a usar OR pero:

  1. Se escribe más al usar UNION que al usar OR
  2. Se entiende mejor al usar UNION que al usar OR cuando las condiciones son complejas

Ejemplo:

Tenemos una tabla llamada CLIENTES que tiene estas filas:

UNION1

Captura 1. Si haces clic en la imagen la verás más grande

Y queremos una consulta que nos muestre los clientes cuyos nombres empiecen con la letra “M” o con la letra “S”. Podríamos escribir una consulta como esta:

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE STARTING WITH 'M' OR
   CLI_NOMBRE STARTING WITH 'S'

Y está muy bien, como la consulta es simple esa es la solución adecuada. Pero si queremos podríamos obtener el mismo resultado usando la cláusula UNION.

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE STARTING WITH 'M'

UNION

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE STARTING WITH 'S'

Entonces, la primera forma es la adecuada cuando las condiciones son simples. Usamos OR y asunto solucionado. Pero cuando las condiciones son complicadas es preferible usar UNION porque nos facilitará la lectura y nos resultará más fácil comprender que hace nuestro SELECT.

Conclusión:

Se puede usar la cláusula UNION para reemplazar al operador condicional OR pero solamente se justifica usar UNION cuando las condiciones son complicadas de entender, ya que al usar UNION es fácil entender lo que está ocurriendo.

Podemos pensar en UNION como en una suma. Nos devuelve el resultado de la primera consulta MÁS el resultado de la segunda consulta.

En nuestro ejemplo, los nombres de los clientes que empiezan con “M” más los nombres de los clientes que empiezan con “S”.

Artículos relacionados:

Entendiendo a las UNION

El índice del blog Firebird21