SQL の不等式条件は <> が適切

2021-03-21
SQL

先日、コードレビューをしていたら、SQLの不等式条件が != から <> に変更されているのを見かけた。どっちも合っているし、挙動は変わらないので特に指摘はしなかったのだが、モヤモヤしたので調べてみた。

結論から言うと、<> を使うのが適切。

ANSI SQL Standard

最新の仕様書は、ANSI の WebStore にて$200程度で購入可能。高くはないけど、この程度の調査で出す金額ではないな…。なんとかならんかなと、ウェブを回遊すると SQL1999 の仕様書を発見

sql1999.pdf

P97 5.2 <token> and <separator><not equals operator> ::= <> という記述を発見。 ANSI SQL Standard では SQL不等式条件は <> と定義されている。つまり、それ以外の不等式条件は、RDBMS が許容してくれている方言ということになる。

各 RDBMS の対応

各バージョンの最新で調べました。

RDBMS Version <> != ^= メモ
MySQL 8.0
Postgres 12.4 !=は構文解析時に<>に変換
Oracle 21c
SQL Server 2019
Sqlite 3.35  

基本的に <>!= は使えるようです。変わり種としては、Oracle の ^= でしょうか。Stack Overflow で見かけた言説としては、 != はプログラミング言語で不等式条件として使われるので、 RDBMS はプログラマーに親和性が高い != の記述を受け入れるようにしたという意見がありました。

まとめ

SQL Standards に準拠して <> を使うというのが、もっともらしい言い訳です。ただし、 != も間違えではないので、あえて個別に修正をいれるほどのものでもない…とも思います。この辺は、コーディング規約で縛りを入れておくと、納得感が出るかもしれません。