Uma razão pela qual as conversões implícitas falham é quando a coluna varchar de junção contém dados que não são numéricos. O Oracle manipula number para varchar2 joins convertendo as strings (confira a citação de Gary em seu comentário), então ele realmente executa isso:
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Se tableB.col2 contiver valores que não são numéricos - parece bastante provável, afinal é uma string - então ele lançará
ORA-01722: invalid number
. Ao converter explicitamente a coluna numérica em uma string, você causa um curto-circuito no comportamento padrão do Oracle. O fato de você não ter esse problema em seus dois primeiros ambientes é uma questão de sorte e não de configuração. Pode ocorrer a qualquer momento, porque requer apenas uma string não numérica para interromper a consulta. Então realmente você deveria rodar com a conversão explícita em todos os ambientes.
Quanto ao desempenho, você pode criar um índice baseado em função ...
create index whatever_idx on tableA ( to_char(col1) )
/