En tant que table1.value
colonne est indexée, vous ne voulez pas la manipuler pour la comparaison car cela empêcherait l'index d'être utilisé. Vous devrez donc modifier la valeur recherchée :
SELECT table1.ID FROM table1 WHERE table1.VALUE = RPAD('123-45', 12)
Oracle le fera implicitement avec la requête que vous avez montrée et utilisera toujours l'index. Et la même chose si vous joignez les tables, mais si vous complétez ou coupez pendant la jointure dépend de la table qui est le pilote :
SELECT table1.ID, table2.ID
FROM table1
JOIN table2 ON table2.value = RTRIM(table1.value)
WHERE table1.VALUE = RPAD('123-45', 12)
Ou :
SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)