No passado, havia muita paranóia por aí IN
. Em particular, lembro-me de afirmações de que pode ser otimizado de forma diferente de um equivalente WHERE EXISTS
. Esta afirmação ainda é verdadeira? Ou agora é garantido que IN
e WHERE EXISTS
sempre dará os mesmos planos de execução nos casos em que as duas consultas são logicamente equivalentes?
Estou falando de consultas do seguinte formato
SELECT [...] FROM [FOO] WHERE [FOO_ID] IN (SELECT [FOO_ID] FROM [BAR])
-- Is logically equivalent to...
SELECT [...] FROM [FOO] WHERE EXISTS (SELECT 1 FROM [BAR] WHERE [BAR].[FOO_ID] = [FOO].[FOO_ID])
Não que eu não esteja falando sobre NOT IN
, NOT EXISTS
ou usando múltiplas IN
cláusulas.