Nein, es gibt keinen Unterschied.
Die beiden Syntaxen sind beide sinnvoll - not like
ist die klarere, aber es ist nicht so, dass Sie einfach not
(ein einfacher unärer boolescher Operator) in solchen Fällen deaktivieren können.
In den meisten Fällen ist die Form der Abfrage für die Leistung nicht wirklich wichtig - jedes Mal, wenn sie es tut, sehen Sie wahrscheinlich einen kleinen Fehler im Ausführungsplaner. Bevor die Abfrage irgendwo kurz vor der Ausführung steht, wird sie auseinandergerissen, analysiert und zu den eigentlichen Schritten zusammengesetzt, um die Ergebnisse zu erhalten - wann immer Sie sich fragen, was in einer Anfrage wirklich passiert, führen Sie es einfach mit Include tatsächlichen Ausführungsplan aus, und Sie ' Ich werde sehen.
Wenn Sie ein Mensch sind, gibt es keinen Grund, nicht not like
zu verwenden - Sie würden den anderen Weg als Teil einer automatischen Code-Generierung verwenden (negieren das Ergebnis eines anderen Ausdrucks), nicht in menschlichen geschriebenen Code. Es sei denn, Sie erstellen diese Abfrage, indem Sie natürlich Strings zusammenschlagen - dann könnte es sogar Sinn ergeben, wenn Sie es selbst schreiben.
Oh, und für Stil, beachten Sie, dass wie gesagt, not
ist ein Operator, kein Funktionsaufruf. So ist die richtige Art und Weise Klammern zu verwenden, würde entweder
not ColumnName like '%a%'
oder besser sein,
(not ColumnName like '%a%')
oder, wenn du verrückt bist (oder wieder, Code-Generierung):
(not (ColumnName LIKE '%a%'))
Verwendung Die Funktionsaufrufsyntax könnte für einige verwirrend sein - und die Operatorpräzedenz in T-SQL ist nicht gerade intuitiv (es versucht zu schwer, einfach zu sein und vermeidet Klammern, was manchmal verwirrend ist). Die meisten SQL-Generatoren neigen dazu, vorsichtig zu sein, und verwenden mehr Klammern als unbedingt notwendig, was normalerweise zu besserer Lesbarkeit (und Korrektheit :) führt, während sie keine bedeutungsvollen Auswirkungen auf die Leistung oder irgendetwas haben.
@tinka: warum ist das genau?) – potashin