Salah satu alasan mengapa konversi implisit gagal adalah ketika kolom varchar bergabung berisi data yang bukan numerik. Oracle menangani nomor ke varchar2 bergabung dengan mengonversi string (lihat kutipan Gary di komentarnya), jadi itu benar-benar mengeksekusi ini:
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Jika tableB.col2 berisi nilai-nilai yang bukan numerik - tampaknya sangat mungkin, itu adalah string - maka itu akan melemparkan ORA-01722: invalid number
. Dengan secara eksplisit mentransmisikan kolom angka ke string, Anda memutus perilaku default Oracle.
Fakta bahwa Anda tidak mendapatkan masalah ini di dua lingkungan pertama Anda adalah masalah keberuntungan bukan konfigurasi. Itu bisa menyerang kapan saja, karena hanya membutuhkan satu string non-numerik untuk memecahkan kueri. Jadi benar-benar Anda harus menjalankan dengan konversi eksplisit di semua lingkungan.
Untuk performa, Anda dapat membuat indeks berbasis fungsi ...
create index whatever_idx on tableA ( to_char(col1) )
/