Uważam, że można to traktować jako kwestię pierwszeństwa operatorów.
Kiedy to piszesz:
FROM groups grp,
insrel archiverel
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
Myślę, że jest to interpretowane przez parser w ten sposób:
FROM groups grp,
(
(
insrel archiverel
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
)
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
)
Jeśli tak, to w najbardziej wewnętrznym sprzężeniu „grp” jest niezwiązane.
Kiedy odwrócisz linie za pomocą "groups" i "insrel", najbardziej wewnętrzne złączenie dotyczy "groups" i "ownrel", więc działa.
Prawdopodobnie to też by zadziałało:
FROM groups grp
JOIN insrel archiverel ON archiverel.dnumber = grp.number
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
WHERE archiverel.snumber = 11128188