SQL звучал для меня как отдельная суровая дисциплина: «надо знать запросы», «попадёшь на интервью — спросят». Я откладывал его дней пять, пока не понял идиотскую вещь: Django это уже делает. Когда я пишу post.author.name, Django внутри строит тот самый JOIN. Я пользовался им месяцами и не знал названия.

Так стыдно-то было. Нейтрально: JOIN соединяет две таблицы по общему полю. Говорят «дай посты вместе с авторами по author_id». Таблицы:

posts (id, title, author_id)
authors (id, name)

-- INNER JOIN: только те, где автор найден
SELECT posts.title, authors.name
FROM posts
JOIN authors ON posts.author_id = authors.id;

-- LEFT JOIN: + посты без автора (вместо имени NULL)
SELECT posts.title, authors.name
FROM posts
LEFT JOIN authors ON posts.author_id = authors.id;

Разница простая: JOIN оставляет совпавшие строки, LEFT JOIN не теряет левую сторону и ставит пусто туда, где нет пары. Когда я увидел за этим «моих» — понял, что знал это и раньше, просто без названия. Страх прошёл от осознания «это не чужая магия, а мой привычный код», а не от зубрёжки.