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.
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo