Presumo che qty è definito come varchar2 in my_table -- altrimenti, non ci sarebbe scopo chiamando to_number . Se questa ipotesi è corretta, scommetto che c'è qualche altra riga nella tabella in cui qty contiene dati non numerici.
SQL è un linguaggio basato su set, quindi Oracle (o qualsiasi altro database) è perfettamente libero di valutare le cose nell'ordine che ritiene opportuno. Ciò significa che Oracle è perfettamente libero di valutare to_number(qty) espressione prima di applicare id=12345 predicato. Se Oracle incontra una riga in cui qty il valore non può essere convertito in un numero, genererà un errore.
È anche possibile che ci siano dei dati non numerici nella riga particolare dove id = 12345 che non viene visualizzato (ad esempio i caratteri di controllo). Puoi verificarlo eseguendo la query
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(se vuoi decimale anziché esadecimale, usa 1010 come secondo parametro per dump ) e controllando se c'è qualcosa di imprevisto nei dati.