Это не имеет значения, оба верны. Я предпочитаю второе.
Мои предпочтения основаны на идее, что таблица BBB - это таблица, которую я добавляю в набор результатов, а под рукой стоит связать столбцы (выражения) из новой таблицы BBB с другими столбцами, уже имеющимися в наборе результатов. Это может иметь больше смысла в другом примере:
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)
Да, это произвольно сложный пример, но иногда реальный код все усложняет. При ссылке на несколько предикатов в условии соединения я считаю полезным, когда каждый предикат ссылается на первые (слева) выражения из таблицы, к которой недавно присоединились.
Существуют и другие шаблоны, которые также помогают, например, когда первичный ключ каждой таблицы представляет собой один столбец с именем «ID», а столбцы с внешним ключом обычно называются PARENTTABLE_ID, например, когда я вижу конструкцию, подобную a.ID = b.ID, то, что я вижу, - это шаблон для первичного ключа, присоединенного к первичному ключу (отношение один к одному, которое не является нормативным шаблоном). И когда я вижу b.FOREIGN_ID = c.FOREIGN_ID, я вижу, что внешний ключ соединяется с внешним ключом. Опять же, это не обычный шаблон, указывающий на то, что это может быть соединение «многие ко многим» или «соединение по быстрому» для повышения производительности. Обычный шаблон, который я ищу в соединении родитель-потомок, выглядит как child.PARENT_ID = parent.ID
Эти шаблоны не правильные или неправильные, просто предпочтение. Я обнаружил, что эти шаблоны не делают код, который выглядит правильно, но делают код «странным» выделяющимся.