На деле это проще, чем выглядит.
Внутренее соединение - это самое обычное соединение таблиц. Даже нет необходимости указывать, что это inner join, если и более простой синтаксис - это будет все равно внутреннее соединение.
Внутреннее соединение означает, что в результате вы получите то, что было в обоих таблицах сразу. Если хотя бы в одной из таблиц не было записи, соответствующей условию соединения - вы не получите соответствующую строку.
Внешнее соединение обозначает, что помимо того, что вам выдало бы внутренее соединение вы дополнительно плюсом получите данные из первой (left join) или второй (right join) таблицы. Даже если в другой таблице и не было записей, соответствующих условию соединения.
Зачем может быть нужно внешнее соединение? Например, у вас есть пользователи, которые не входят ни в одну группу. Построив внешнее левое соединение по таблице пользователи и по таблице группы - вы получите полный список пользователей. Те из них, что не входят ни в одну группу - тоже будут присутствовать в списке, но в колонках описывающих группы будет указано NULL.
Если же вы построите ровно такой же запрос по внутреннему (обычному) соединению, то есть соедините пользователей и группы - то получите только тех, кто входит хоть в какую-то группу.