Returns all rows from both tables; NULLs fill columns where no match exists on either side.
Returns all rows from both tables, filling in NULLs where there is no match. Useful for finding gaps in both directions (e.g., customers who have never ordered and orders with missing customer records). Not supported natively by MySQL without workarounds.
| Database System | Support Status | Since Version | Notes |
|---|---|---|---|
| MySQL | ✗ Not Supported | — | Not supported. Emulate with LEFT JOIN UNION RIGHT JOIN. |
| PostgreSQL | ✓ Supported | all | OUTER keyword is optional. |
| SQL Server | ✓ Supported | all | OUTER keyword is optional. |
| Oracle | ✓ Supported | all | OUTER keyword is optional. |
| SQLite | ✓ Supported | 3.39.0 | FULL OUTER JOIN added in SQLite 3.39.0 (July 2022). Emulate with UNION on older versions. |
Useful for finding rows that exist in one table but not the other. MySQL has no native support and requires a UNION workaround.
Not supported. Emulate with LEFT JOIN UNION RIGHT JOIN.
OUTER keyword is optional.
OUTER keyword is optional.
OUTER keyword is optional.
FULL OUTER JOIN added in SQLite 3.39.0 (July 2022). Emulate with UNION on older versions.