Я не думаю, что кто-то это достаточно прибил или объяснил очень хорошо. Вы объединяете объединения «старый стиль» (тета) и «новый стиль» (ANSI), которые, как я сильно подозреваю, группируются так, как вы этого не ожидаете. Посмотрите на это так:
SELECT * FROM a, b JOIN c ON a.x = c.x
все равно что сказать
SELECT * FROM a, (b JOIN c on a.x = c.x)
где заключенная в скобки вещь представляет собой набор таблиц, объединенных в одну виртуальную таблицу, для объединения с тета-соединением против 'a'. Очевидно, что таблица «a» не может быть частью объединения, так как она присоединяется только позже. Обратитесь, и вы делаете
SELECT * FROM b, (a JOIN c on a.x = c.x)
, что совершенно понятно и так хорошо. Я не уверен, почему вы не используете синтаксис ANSI объединения для всего этого, хотя, кажется немного странным (и жестоким для человека, который должен его поддерживать!)