Det afhænger af.. Generelt garanterer Oracle ikke, at en SQL-sætning vil bruge kortslutningsevaluering (selvom PL/SQL er garanteret at udføre kortslutningsevaluering). Oracle optimizer er fri til at evaluere prædikaterne i den rækkefølge, den forventer at være mest effektiv. Det kan betyde, at det første prædikat evalueres først, og kun de matchende rækker har det andet prædikat evalueret, men det er fuldt ud muligt, at enten det omvendte sker, eller at Oracle transformerer forespørgslen til en slags UNION
og evaluerer begge prædikater fuldt ud, før resultaterne kombineres.
Når det er sagt, hvis optimizeren kan bestemme på kompileringstidspunktet, at et prædikat altid vil evaluere til TRUE
eller FALSE
, skal optimeringsværktøjet bare behandle det som en konstant. Så hvis der for eksempel er en begrænsning på tabellen, der forhindrer X
fra nogensinde at have en værdi på "sand", bør optimeringsværktøjet slet ikke evaluere det andet prædikat (selvom forskellige versioner af optimeringsværktøjet vil have forskellige evner til at registrere, at noget er en konstant på kompileringstidspunktet).
Med hensyn til den anden del af dit spørgsmål, uden at se forespørgselsplanerne, er det meget svært at sige. Oracle optimizer plejer at være ret god til at transformere forespørgsler fra én form til en anden, hvis der er mere effektive måder at evaluere det på. Generelt, men hvis subQ
kommer til at returnere et relativt stort antal rækker sammenlignet med table
, kan det være mere effektivt at strukturere forespørgslen som en EXISTS
snarere end som en IN
.