NÃO EM VEZES DE EXISTÊNCIA
Qual destas perguntas é a mais rápida?
NÃO EXISTEM:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Ou NÃO EM:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
O plano de execução da consulta diz que ambos fazem a mesma coisa. Se for esse o caso, qual é a forma recomendada?
Isto é baseado na base de dados NorthWind.
[Editar]
Acabei de encontrar este artigo útil: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Eu acho que I'vai ficar com NOT EXISTS.
502
3
Se o planejador de execução diz que eles'são iguais, eles'são iguais. Use o que tornar sua intenção mais óbvia -- neste caso, o segundo.
Na verdade, acredito que este seria o mais rápido:
Depende...
não seria relativamente lento o is't muito para limitar o tamanho do que a consulta verifica para ver se a chave está dentro. Neste caso, seria preferível EXISTS.
Mas, dependendo do otimizador do SGBD's, isto não poderia ser diferente.
Como exemplo de quando EXISTS é melhor