先日、コードレビューをしていたら、SQLの不等式条件が !=
から <>
に変更されているのを見かけた。どっちも合っているし、挙動は変わらないので特に指摘はしなかったのだが、モヤモヤしたので調べてみた。
結論から言うと、<>
を使うのが適切。
ANSI SQL Standard
最新の仕様書は、ANSI の WebStore にて$200程度で購入可能。高くはないけど、この程度の調査で出す金額ではないな…。なんとかならんかなと、ウェブを回遊すると SQL1999 の仕様書を発見
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 に準拠して <>
を使うというのが、もっともらしい言い訳です。ただし、 !=
も間違えではないので、あえて個別に修正をいれるほどのものでもない…とも思います。この辺は、コーディング規約で縛りを入れておくと、納得感が出るかもしれません。