2011-11-01 4 views
3

Quelle est la différence entre si j'ai écrit la requête NOT des manières suivantes.Comment utiliser PAS dans la clause Where?

SELECT iBatchID,COUNT(*) FROM #temp WHERE NOT iBatchID IN (1) GROUP BY iBatchID 

SELECT iBatchID,COUNT(*) FROM #temp WHERE iBatchID NOT IN (1) GROUP BY iBatchID 

Quelle est la différence entre si j'utilise WHERE NOT iBatchID IN (1) et WHERE iBatchID NOT IN (1)?

+1

Vérifiez le plan d'exécution pour voir s'il y a une différence. –

+2

D'après ce que j'ai compris, ce n'est pas différent de dire '! (5 == 3)' et '5! = 3'. Ils évaluent tous deux à la même chose. Sauf que ce dernier exprime mieux votre but. –

+1

En fonction de vos index, je suppose que le compilateur pourrait choisir un chemin différent, mais je viens d'exécuter des tests sur deux tables simples et j'ai obtenu le même plan d'exécution pour les deux méthodes. –

Répondre

3

Il n'y a pas de différence. Ils auront le même résultat de requête.

Et je crois que les plans d'exécution doivent être identiques, mais la meilleure façon de le savoir est de capturer les plans d'exécution réels de chaque requête.

Personnellement, je choisis toujours ... WHERE SomeCol NOT IN (...), car il se lit un peu plus clair que ... NOT WHERE SomeCol IN (...). Mais ceci est toute préférence personnelle et ce que vous ressentez comme étant plus lisible et maintenable.

+0

@VikrantMore pas de problème, heureux d'aider :) –

Questions connexes