Saya yakin jawabannya adalah bahwa Oracle sangat, sangat tua.
Kembali di masa lalu sebelum ada standar SQL, Oracle membuat keputusan desain yang mengosongkan string di VARCHAR
/VARCHAR2
kolomnya adalah NULL
dan bahwa hanya ada satu pengertian NULL (ada teori relasional yang akan membedakan antara data yang tidak pernah diminta, data yang jawabannya ada tetapi tidak diketahui oleh pengguna, data yang tidak ada jawaban, dll. yang merupakan semacam NULL
).
Pada saat standar SQL muncul dan menyetujui bahwa NULL
dan string kosong adalah entitas yang berbeda, sudah ada pengguna Oracle yang memiliki kode yang menganggap keduanya setara. Jadi Oracle pada dasarnya dibiarkan dengan opsi untuk memecahkan kode yang ada, melanggar standar SQL, atau memperkenalkan semacam parameter inisialisasi yang akan mengubah fungsionalitas sejumlah besar kueri yang berpotensi. Melanggar standar SQL (IMHO) adalah yang paling tidak mengganggu dari tiga opsi ini.
Oracle telah membuka kemungkinan bahwa VARCHAR
tipe data akan berubah di rilis mendatang untuk mematuhi standar SQL (itulah sebabnya semua orang menggunakan VARCHAR2
di Oracle karena perilaku tipe data tersebut dijamin akan tetap sama di masa mendatang).