А где ответ на первый вопрос, про тип связи? Он самый главный. Видимо "многие-ко-многим".
"Разруха не в сортирах, разруха в головах"
Судя по всему, декартово произведение у вас не в запросе, который отрабатывает правильно, а в таблицах, в которых значений мало и они сильно пересекаются, а то и вообще во впечатлении от выборки.
Запрос выдаёт ВСЕХ пользователей, связанных с КАЖДОЙ записью беседы (видимо всех участников конкретной беседы, если я правильно понял смысл названий.
Так вот, SQL так устроен, что вместо
Беседа 1:
- Участник 1
- Участник 2
- Участник 4
Выводит
Беседа 1, Участник 1
Беседа 1, Участник 2
Беседа 1, Участник 4
Что не является пересечением (участник 3 не был выведен, т.к. принимал участие в другой беседе), но может таким выглядеть. Рекомендую для теста ввести около 3 бесед и 10 участников, в каждой беседе не более 3 участников в произвольных сочетаниях, и добавьте сортировку по `conversation`.`id_conversation` тогда будет отчётливо видно, как работает.
И да, изучите вопрос первичных ключей (ПК), их назначения и ОБЯЗАТЕЛЬНО используйте. Здесь, например, исходя из логики запроса напрашиваются`conversation`.`id_conversation`, хотя бы. И нормальные формы БД тоже...
Для проверки сравните количество строк в запросах
SELECT * FROM `user_conversation`
SELECT * FROM `user_conversation` WHERE `user_conversation`.`id_conversation` = 1
С количеством строк, которые выводит ваш запрос.