Как для INNER JOIN єффективнее избежать дублирования строк?
Всем привет.
Вот в чем я хочу разобраться с JOIN'ами: уже мне стало понятно, что джоины - это не пересечения множеств или там кругов, как пишут в некоторых местах, а как декартово произведение скорее. И вот теперь такой вопрос: CROSS JOIN - это просто декартово произведение. А вот INNER JOIN - это тоже декартово произведение, но по некоторым условиям. Это означает, что если по ключу, по которому делаем сравнение, есть одинаковые значения в двух таблицах, то мы получим дублирование. Такая же ситуация и с LEFT JOIN. И вот как эффективнее всего в таком случае избавляться от дублей? И еще такой вопрос: если CROSS JOIN и INNER JOIN происходят из одной сути (декартового произведения), то почему INNER JOIN получается работает быстрее CROSS JOIN, если в обеих случаях скрипту нужно пройтись по всем вариантам, просто для INNER JOIN нужно отсечь те, которые не подпадают под условие?
В качестве примера накидал тут несколько джоинов и их результаты: https://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=e547ce1ccc6dc66ba7b64ca9afc0a5a6