En muchas consultas se puede obtener exactamente el mismo resultado si usamos una subconsulta o si usamos un JOIN, entonces ¿cuál es preferible usar?

Veamos un ejemplo.

Listado 1.


SELECT
   VTC_IDENTI,
   VTC_FECHAX,
   VTC_IDECLI,
   CLI_NOMBRE
FROM
   VENTASCAB
JOIN
   CLIENTES
      ON VTC_CODSUC = CLI_CODSUC AND
         VTC_IDECLI = CLI_IDENTI
WHERE
   VTC_CODSUC = 0 AND
   VTC_IDENTI BETWEEN 31 AND 39
ORDER BY
   VTC_IDENTI

Listado 2.

SELECT
   VTC_IDENTI,
   VTC_FECHAX,
   VTC_IDECLI,
   (SELECT CLI_NOMBRE FROM CLIENTES WHERE VTC_CODSUC = CLI_CODSUC AND    VTC_IDECLI = CLI_IDENTI)
FROM
   VENTASCAB
WHERE
   VTC_CODSUC = 0 AND
   VTC_IDENTI BETWEEN 31 AND 39
ORDER BY
   VTC_IDENTI

JOIN1.png

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

Tanto si ejecutamos el Listado 1. como si ejecutamos el Listado 2. el resultado obtenido será exactamente el mismo y el rendimiento también será exactamente el mismo, ninguno será preferible al otro.

Por lo tanto, desde ese punto de vista, ejecutar a uno o al otro es indiferente, cuestión de gustos nomás.

Sin embargo, hay que tener en cuenta que las subconsultas le cuestan más al Firebird optimizar. En consultas sencillas como las mostradas arriba no habrá diferencias pero en subconsultas complicadas ya será otro tema.

Por lo tanto, lo recomendable es usar JOIN y no subconsultas. Si usamos subconsultas podríamos obtener el mismo rendimiento que si usamos JOIN pero jamás obtendríamos un mejor rendimiento. En cambio si usamos JOIN a veces podríamos obtener un mejor rendimiento que si usamos subconsultas.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21