Three or more tables
Joining more than two tables is just chained joins — SQLite evaluates them left to right. Aliases become essential at three or more tables; long unaliased names get unreadable fast.
A self-join is a table joined to itself with two aliases. It's the natural shape for hierarchical data (parent/child, manager/employee), graph traversal one hop, and pairwise comparisons.
Tip: Recursive hierarchies (arbitrary depth) want
WITH RECURSIVE CTEs (track 8). A self-join handles one level. For deeper trees, prefer the recursive CTE form — it's more general and SQLite optimizes it well.