Para relacionar dos tablas entre sí disponemos de la cláusula JOIN. Además de las conocidas y tradicionales (INNER, LEFT, RIGHT, FULL) Firebird también dispone de otras dos: NATURAL y CROSS.

Con NATURAL JOIN se relacionan dos tablas con los nombres de las columnas que tienen en común. O sea que el requisito es que los nombres de las columnas en ambas tablas sean idénticos.

Con CROSS JOIN se hace una multiplicación de todas las filas de una tabla por todas las filas de la otra tabla. O sea que si una tabla tiene 30 filas y la otra tabla tiene 50 filas el resultados tendrá 30 * 50 = 1.500 filas.

Ejemplo:

Tenemos una tabla SUCURSALES que tiene 2 filas y una tabla CLIENTES que tiene 4 filas, como vemos a continuación:

NATURAL1

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

NATURAL2

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

Las tablas no tienen columnas con los mismos nombres por lo tanto en ellas no se puede hacer un NATURAL JOIN. Pero siempre se les puede hacer un CROSS JOIN:

SELECT
   SUC_CODIGO,
   SUC_NOMBRE,
   CLI_IDENTI,
   CLI_NOMBRE
FROM
   CLIENTES
CROSS JOIN
   SUCURSALES

NATURAL3

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

Como la tabla de SUCURSALES tiene 2 filas y la tabla de CLIENTES tiene 4 filas entonces el resultado tendrá, sí o sí, 8 filas (que es el resultado de multiplicar 2 por 4).

¿Y no obtendríamos el mismo resultado usando un FULL JOIN? No, porque el FULL JOIN listará a cada fila que cumpla la relación una sola vez y solamente agregará las filas de cualquiera de las tablas que no la cumpla.

SELECT
   SUC_CODIGO,
   SUC_NOMBRE,
   CLI_IDENTI,
   CLI_NOMBRE
FROM
   CLIENTES
FULL JOIN
   SUCURSALES
      ON CLI_CODSUC = SUC_CODIGO

NATURAL4

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

Artículo relacionado:

El índice del blog Firebird21