Nie, nie ma różnicy.
Obie składnie mają sens - not like
jest bardziej wyraźny, ale nie można po prostu wyłączyć not
(prosty jednolity operator boolowski) w takich przypadkach.
W większości przypadków forma zapytania nie ma większego znaczenia dla wydajności - w każdym przypadku prawdopodobnie patrzysz na subtelny błąd w planowaniu realizacji. Zanim zapytanie znajdzie się w pobliżu, zostaje rozerwane, przeanalizowane i przebudowane na rzeczywiste kroki potrzebne do uzyskania wyników - zawsze, gdy zastanawiasz się, co naprawdę dzieje się w zapytaniu, po prostu wykonaj je przy użyciu planu wykonania rzeczywistego, a Ty " zobaczę.
Jeśli jesteś człowiekiem, nie ma powodu, aby nie używać not like
- najczęściej używałbyś innej metody jako części automatycznego generowania kodu (negując wynik innego wyrażenia), a nie w ludzkim pisanym kodzie. Jeśli nie budujesz tego zapytania, oczywiście, łącząc ze sobą łańcuchy - to może to mieć sens nawet wtedy, gdy sam napiszesz.
Aha, a jeśli chodzi o styl, zauważ, że tak jak powiedziałem, not
jest operatorem, a nie wywołaniem funkcji. Więc właściwy sposób korzystać z nawiasów byłoby albo
not ColumnName like '%a%'
lub lepiej,
(not ColumnName like '%a%')
lub, jeśli jesteś szalona (lub ponownie, generując kod):
(not (ColumnName LIKE '%a%'))
Używanie składnia wywołania funkcji może być myląca dla niektórych - a pierwszeństwo operatora w T-SQL nie jest dokładnie intuicyjne (zbyt trudne jest używanie łatwych w użyciu i unikanie nawiasów, co czasami jest mylące). Większość generatorów SQL ma tendencję do bycia ostrożnym i używania więcej nawiasów niż jest to absolutnie konieczne, co zwykle prowadzi do lepszej czytelności (i poprawności :)), bez znaczącego wpływu na wydajność lub czegokolwiek.
@tinka: dlaczego tak jest dokładnie?) – potashin