What do RIGHT JOIN and FULL OUTER JOIN do, and which engines support them?
RIGHT JOIN is the mirror of LEFT JOIN: it preserves every row from the right table and fills the left-hand columns with NULLs where there is no match. FULL OUTER JOIN preserves the rows from both sides — it is the union of the LEFT JOIN and the RIGHT JOIN behaviours, so unmatched rows appear with NULLs on the opposite side.
Support is the interesting part. LEFT JOIN has been in the SQL standard and in every major engine for decades. RIGHT JOIN is standard too, but its implementation arrived late in some engines — SQLite only added it in version 3.39, and the playground these examples run on is 3.36, so a RIGHT JOIN will not parse there. FULL OUTER JOIN is standard SQL and MySQL, PostgreSQL, Oracle and SQL Server all have it, but SQLite still does not, as of 3.39.
The good news is that neither keyword is necessary. A RIGHT JOIN is always expressible as a LEFT JOIN with the tables swapped, and a FULL OUTER JOIN is always expressible as the union of a LEFT JOIN and an anti-join. Since the LEFT JOIN forms run everywhere, that is the portable answer, and it also makes the semantics explicit rather than implicit.
One more practical note about FULL OUTER JOIN: it is genuinely rare in application queries. A report that says "show me every customer and every order" is usually better served by two separate queries or by a UNION of a LEFT JOIN and an anti-join, because the FULL JOIN makes it easy to forget which columns are nullable. But when you do need it, and the engine has it, it is the clearest possible statement of the requirement.