Redefine ad_locales.language table column as varchar to avoid Oracle idiosyncrasies when comparing a char(n) with other string datatypes when using bind variables (following insightful LARS's remark)
char(n) in Oracle are automatically padded to be n characters long. Apparently, comparing char(n) -> char(n) is "blanks insensitive", while comparing char(n) -> varchar2(n) will account for such automatically inserted blanks. When using bind variables, one should carefully specify the type to use to avoid surprises with char(n) (for this we should touch the oracle driver), normalize the value via trim/pad all the time or replace every char(n) datatype with varchar2. ...are there other places where this is happening?