Cláusula EXISTS ó semi-joins

Creado por David Miralpeix, Modificado el Vie, 16 Feb a 12:25 P. M. por David Miralpeix

Cuando no necesitamos sacar ninguna columna de alguna de las tablas de nuestra consulta y solo la usamos para filtrar, es aconsejable utilizar el EXISTS.

 

Por ejemplo, para devolver los artículos que estén en líneas de pedidos en estado generado, se suele hacer lo siguiente:

 

 

SELECT DISTINCT A.IdArticulo

FROM Articulos A INNER JOIN Pedidos_Cli_Lineas L ON A.IdArticulo=L.IdArticulo

WHERE L.IdEstado=0

 

Ó

 

SELECT IdArticulo

FROM Articulos WHERE IdArticulo IN (SELECT IdArticulo FROM Pedidos_Cli_Lineas WHERE IdEstado=0)

 

  

Pero suele ser más eficiente hacer lo siguiente:

 

SELECT A.IdArticulo 

FROM Articulos A

WHERE EXISTS (SELECT 1 FROM Pedidos_Cli_Lineas L WHERE L.IdArticulo =A.IdARticulo AND IdEstado =0)

 

De esta manera en cuanto se encuentra el artículo en una línea de pedido, se detiene la evaluación del resto de registros y se pasa al siguiente artículo. Del mismo modo, una cláusula IF EXISTS … es más rápido que un SELECT COUNT (*) porque en el momento en que se encuentra el primer registro la consulta finaliza, mientras que con un COUNT(*) debe contar todas las filas.

Siguiente artículo >>

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo