私を含め、何度も徹底的に議論しました。
(外部結合であるかどうかに関係なく) 暗黙的ではなく明示的な JOIN を使用すると、暗黙的な結合を使用してデカルト積を誤って作成することがはるかに簡単になります。
明示的な JOIN を使用すると、「偶然に」JOIN を作成することはできません。関係するテーブルが多いほど、1 つの結合条件を見逃すリスクが高くなります。
基本的に (+) は、ANSI 結合に比べて大幅に制限されています。さらに、ANSI 結合構文はすべての主要な DBMS でサポートされているのに対し、Oracle でのみ使用できます。
ANSI 構文に移行した後、SQL のパフォーマンスが向上するわけではありません。構文が異なるだけです。
前の例に示した、より柔軟な FROM 句の結合構文を使用することを強くお勧めします。過去に ANSI 構文にいくつかのバグがありましたが、最新の 11.2 または 12.1 を使用する場合は、既に修正されているはずです。
JOIN 演算子を使用すると、SQL コードが ANSI 準拠であることを確認できるため、フロントエンド アプリケーションを他のデータベース プラットフォームに簡単に移植できます。
結合条件では、各テーブルの選択性が非常に低く、理論上の外積のタプルの選択性が高くなります。where ステートメントの条件は、通常、はるかに高い選択性を持っています。
Oracle は内部的に ANSI 構文を (+) 構文に変換します。これは、実行計画の述語情報セクションで確認できます。
11.2 を使用している場合は、ANSI に参加することをお勧めします。12C を使用すると、OUTER JOINS でいくつかの新しいバグが発見されました。
また、11.2 で修正された 11.2 より前の ANSI 構文を使用しているときに、Oracle にいくつかのバグがあったことも覚えています。
私の意見では、私は ANSI 構文の大ファンではありません。Oracle は ANSI の標準を確認していますが、完全にバグがないわけではありません。