It doesn't really matter, both are correct. My preference is for the second.
My preference is based on the idea that table BBB is the table I'm adding into the result set, and the job at hand is tying columns (expressions) from the new table BBB to other columns already in the result set. It may make more sense in a different example:
SELECT ...
FROM AAA a
JOIN BBB b ON (b.AAA_ID = a.ID)
JOIN CC c ON (c.AAA_ID = b.AAA_ID AND UPPER(c.FEE) IN ('FI','FO'))
JOIN DDD d ON (d.CC_ID = c.ID AND LEFT(d.DAH,2) = c.FEE)
Yes, this is an arbitarily complex example, but sometimes real code does get this complicated. When referencing multiple predicates in the join condition, I find it helpful when each predicate references first (on the left side) expressions from the table most recently joined.
There are other patterns that help as well, for example, when the primary key of each table is a single column named "ID" and foreign key columns are typically named PARENTTABLE_ID, such that when I see a construct like a.ID=b.ID, what I'm seeing is a pattern for a primary key joined to a primary key (a one-to-one relationship, which is not the normative pattern). And when I see b.FOREIGN_ID = c.FOREIGN_ID, what I'm seeing is a foreign key being joined to a foreign key. Again, not the usual pattern, indicating this may be a many-to-many join, or maybe a shortcut join for performance. The usual pattern I'm looking for in a parent-child join is like child.PARENT_ID = parent.ID
These patterns aren't right or wrong, just a preference. I find that these patterns don't make code that is right look pretty, but does make code that is "odd" stand out.