Je pense que vous pouvez considérer cela comme un problème de priorité des opérateurs.
Lorsque vous écrivez ceci :
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 pense qu'il est interprété par l'analyseur comme ceci :
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
)
Si c'est le cas, alors dans la jointure la plus interne "grp" n'est pas lié.
Lorsque vous inversez les lignes avec "groups" et "insrel", la jointure la plus interne s'applique à "groups" et "ownrel", donc cela fonctionne.
Cela fonctionnerait probablement aussi :
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