Een reden waarom impliciete conversies mislukken, is wanneer de samenvoegende varchar-kolom gegevens bevat die niet numeriek zijn. Oracle verwerkt nummer naar varchar2 joins door de strings te converteren (bekijk Gary's citaat in zijn commentaar), dus het voert dit eigenlijk uit:
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Als tableB.col2 waarden bevat die niet numeriek zijn - lijkt heel waarschijnlijk, het is toch een string - dan zal het ORA-01722: invalid number
slingeren . Door de nummerkolom expliciet naar een string te casten, sluit u het standaardgedrag van Oracle kort.
Het feit dat je dit probleem niet krijgt in je eerste twee omgevingen is een kwestie van geluk en niet van configuratie. Het kan op elk moment toeslaan, omdat er slechts één niet-numerieke tekenreeks nodig is om de query te verbreken. Dus eigenlijk zou je de expliciete conversie in alle omgevingen moeten uitvoeren.
Wat de prestaties betreft, zou u een op functies gebaseerde index kunnen bouwen ...
create index whatever_idx on tableA ( to_char(col1) )
/