特定の状況下では ORDER BY 句なしに並び替えられて取り出されることがある。
これは Oracle(オプティマイザ) が効率的にデータ処理するために、その処理プロセスで並び替え処理(事前処理含む)があるだけで、これを取り出し結果の並び替えに代用するようなことはしてはならない(※)。
(※) 索引構成表 において ORDER BY によるオーバーヘッドは回避される(記述してもソート処理がスキップされる)。
既にソートされている ソート済ハッシュ・クラスタ においても特記は無いが 実行計画 からみて ORDER BY によるオーバーヘッドは回避されている。
ORDER BY を記述することによるメリットはあるが、デメリットはないといえる。
DISTINCT と OREDER BY 併用時の制限事項
DISTINCT を SELECT 文に指定する場合には ORDER BY には SELECT リストに含まれていない項目を並び替えに使用できない。これは DISTINCT も ORDER BY も一時領域を使用してソート(して重複を削除 ※)する必要がある。異なるキーのソートを同時の実行できないということ。
(※) 最近では強力な CPU パワーと大規模メモリ志向によって結果セットの行をハッシュにして重複除去するプランになることが多いらしい。