AFAIK, (+) notasi hanya hadir untuk kompatibilitas mundur karena Oracle memulai debutnya sebelum standar ANSI untuk bergabung diberlakukan. Ini khusus untuk Oracle dan Anda harus menghindari menggunakannya dalam kode baru jika tersedia versi yang memenuhi standar yang setara.
Sepertinya ada perbedaan antara keduanya, dan (+) notasi memiliki batasan yang tidak dimiliki sintaks ANSI join. Oracle sendiri menyarankan Anda untuk tidak menggunakan (+) notation.Deskripsi lengkap di sini di Oracle® Database SQL Language Reference11g Rilis 1 (11.1):
Oracle menyarankan Anda menggunakan
FROMklausaOUTER JOINsintaks daripada operator bergabung Oracle. Kueri gabungan luar yang menggunakan operator bergabung Oracle(+)tunduk pada aturan dan batasan berikut, yang tidak berlaku untukFROMklausaOUTER JOINsintaks:
- Anda tidak dapat menentukan
(+)operator di blok kueri yang juga berisiFROMklausa bergabung dengan sintaks.(+)operator hanya dapat muncul diWHEREklausa atau, dalam konteks korelasi kiri (saat menentukanTABLEklausa) diFROMklausa, dan hanya dapat diterapkan ke kolom tabel atau tampilan.- Jika A dan B digabungkan dengan beberapa kondisi join, maka Anda harus menggunakan
(+)operator dalam semua kondisi ini. Jika tidak, maka Oracle Database hanya akan mengembalikan baris yang dihasilkan dari gabungan sederhana, tetapi tanpa peringatan atau kesalahan untuk memberi tahu Anda bahwa Anda tidak memiliki hasil gabungan luar.(+)operator tidak menghasilkan gabungan luar jika Anda menentukan satu tabel di kueri luar dan tabel lainnya di kueri dalam.- Anda tidak dapat menggunakan
(+)operator untuk melakukan outer-join ke tabel itu sendiri, meskipun self join adalah valid.Misalnya, pernyataan berikut tidak valid:
SELECT employee_id, manager_id FROM employees WHERE employees.manager_id(+) = employees.employee_id;Namun, self join berikut ini valid:
SELECT e1.employee_id, e1.manager_id, e2.employee_id FROM employees e1, employees e2 WHERE e1.manager_id(+) = e2.employee_id;
(+)operator hanya dapat diterapkan ke kolom, bukan ekspresi arbitrer. Namun, ekspresi arbitrer dapat berisi satu atau lebih kolom yang ditandai dengan(+)operator.- Sebuah
WHEREkondisi yang mengandung(+)operator tidak dapat digabungkan dengan kondisi lain menggunakanORoperator logika.- Sebuah
WHEREkondisi tidak dapat menggunakanINkondisi perbandingan untuk membandingkan kolom yang ditandai dengan(+)operator dengan ekspresi.Jika
WHEREklausa berisi kondisi yang membandingkan kolom dari tabel B dengan konstanta, maka(+)operator harus diterapkan ke kolom sehingga Oracle mengembalikan baris dari tabel A yang telah menghasilkan null untuk kolom ini. Jika tidak, Oracle hanya mengembalikan hasil gabungan sederhana.Dalam kueri yang melakukan gabungan luar lebih dari dua pasang tabel, satu tabel bisa menjadi tabel yang dihasilkan nol hanya untuk satu tabel lainnya. Karena alasan ini, Anda tidak dapat menerapkan
(+)operator ke kolom B dalam kondisi join untuk A dan B dan kondisi join untuk B dan C. LihatSELECTuntuk sintaks untuk gabungan luar.