En af grundene til, at implicitte konverteringer mislykkes, er, når varchar-kolonnen sammenføjning indeholder data, som ikke er numeriske. Oracle håndterer nummer til varchar2 joins ved at konvertere strengene (tjek Garys citat i hans kommentar), så det faktisk udfører dette :
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Hvis tableB.col2 indeholder værdier, der ikke er numeriske - virker ret sandsynligt, det er trods alt en streng - så vil den kaste ORA-01722: invalid number
. Ved eksplicit at caste nummerkolonnen til en streng kortslutter du Oracles standardadfærd.
Det faktum, at du ikke får dette problem i dine to første miljøer, er et spørgsmål om held og ikke konfiguration. Det kan slå til når som helst, fordi det kun kræver én ikke-numerisk streng for at bryde forespørgslen. Så egentlig burde du køre med den eksplicitte konvertering i alle miljøer.
Hvad angår ydeevne, kan du bygge et funktionsbaseret indeks ...
create index whatever_idx on tableA ( to_char(col1) )
/