En anledning till att implicita konverteringar misslyckas är när den sammanfogade varchar-kolumnen innehåller data som inte är numeriska. Oracle hanterar nummer till varchar2-anslutningar genom att konvertera strängarna (kolla in Garys citat i hans kommentar), så det utför faktiskt detta :
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Om tableB.col2 innehåller värden som inte är numeriska - verkar ganska troligt, det är trots allt en sträng - då skickar den ORA-01722: invalid number
. Genom att explicit casta nummerkolumnen till en sträng kortsluter du Oracles standardbeteende.
Det faktum att du inte får det här problemet i dina två första miljöer är en fråga om tur inte konfiguration. Den kan slå till när som helst, eftersom den bara kräver en icke-numerisk sträng för att bryta frågan. Så egentligen borde du köra med den explicita konverteringen i alla miljöer.
När det gäller prestanda kan du bygga ett funktionsbaserat index ...
create index whatever_idx on tableA ( to_char(col1) )
/