MySQL has supported left/right outer joins for as long as I can remember, and I've been using it continuously since 2003.
MySQL doesn't support full outer join, but it's rarely needed, and you can often get a similar result using a UNION. (Clunky, I'll admit... but I'd say the same thing about Postgres recommending against use of NOT IN, which is a common construct and more readable than an anti-join.)
> . but I'd say the same thing about Postgres recommending against use of NOT IN, which is a common construct and more readable than an anti-join.
The recommendation against that is due to the semantics defined in the standard. If there is any NULL in the list matched against, the entire a NOT IN (...) expression also has to evaluate to NULL. Which is extremely confusing to most people (and has some consequences in how efficient things can be executed).
MySQL doesn't support full outer join, but it's rarely needed, and you can often get a similar result using a UNION. (Clunky, I'll admit... but I'd say the same thing about Postgres recommending against use of NOT IN, which is a common construct and more readable than an anti-join.)
CTEs were added in MySQL 8.0 (~1.5 years ago).
Agreed on the other points.