manejo de condiciones en consulta

23/12/2005 - 21:01 por hongo32es | Informe spam
Hola a todos, tengo una duda acerca de la evaluacion de condiciones en
una clausula where, por ejemplo si tengo esta condicion: where c1 = N1
and c2 = N2 como evalua sql server esta condicion? si la primera
condicion (c1 = N1) es falsa, se detiene en la evaluacion de la
condicion? o continua y si es asi... que pasa en una condicion
agrupada?

que pasaria en esta consulta: where c2 = 3 and (p1 is null or exists
(select 1 from XXX where s1 = p1)). la sentencia dentro del exists se
ejecuta?

Gracias por su ayuda.
 

Leer las respuestas

#1 qwalgrande
26/12/2005 - 21:23 | Informe spam
Hola.

Eso depende del plan de ejecución que tome la consulta. En función de lo que
el motor considere más optimo, evaluará primero una y luego otra o sólo una
de ellas. Por ejemplo en la siguiente consulta:
select *
from tablaA a inner join tablaB b on a.campo = b.campo
where a.campo2 = 'valor' and b.campo3 is null

Es más que probable que el plan de ejecución evalúe la segunda condición lo
primero, devuelva 0 registros y no haga nada más. Es un caso extremo, por
supuesto, pero espero que sirva para ilustrar lo que quiero exponer.

Alberto López Grande (qwalgrande)
escribió en el mensaje
news:
Hola a todos, tengo una duda acerca de la evaluacion de condiciones en
una clausula where, por ejemplo si tengo esta condicion: where c1 = N1
and c2 = N2 como evalua sql server esta condicion? si la primera
condicion (c1 = N1) es falsa, se detiene en la evaluacion de la
condicion? o continua y si es asi... que pasa en una condicion
agrupada?

que pasaria en esta consulta: where c2 = 3 and (p1 is null or exists
(select 1 from XXX where s1 = p1)). la sentencia dentro del exists se
ejecuta?

Gracias por su ayuda.

Preguntas similares