Похоже, вы не совсем понимаете различные типы соединений. Всего существует 5 различных типов соединения: ВНУТРЕННЕЕ, ВЛЕВОЕ НАРУЖНОЕ, ПРАВНОЕ НАРУЖНОЕ, ПОЛНОЕ НАРУЖНОЕ, КРЕСТ. Я покажу вам пример всех 5, используя эти 2 таблицы
Таблицы AA и BB будут иметь только идентификатор поля. Таблица AA будет иметь «A» и «B» в качестве значений для ID. Таблица BB будет иметь значения «B», «C» и «D» для идентификатора.
Для INNER JOIN включены только те строки с совпадающими значениями. Таким образом, ВНУТРЕННЕЕ объединение AA и BB будет:
'B', 'B'
Для LEFT OUTER JOIN возвращается каждая строка в левой таблице, а для тех строк в правой таблице без совпадающего значения возвращается NULL. Итак, мы получаем:
'A', NULL
'B', 'B'
Для RIGHT OUTER JOIN возвращается каждая строка в правой таблице, а для тех строк в левой таблице без соответствующего значения возвращается NULL. Итак, мы получаем:
'B', 'B'
NULL, 'C'
NULL, 'D'
Для FULL OUTER JOIN возвращаются все строки в обеих таблицах. И пропущенные значения в любой таблице равны NULL. Итак, мы получаем:
'A', NULL
'B', 'B'
NULL, 'C'
NULL, 'D'
И, наконец, для CROSS JOIN каждая строка в каждой таблице возвращается с каждой строкой в другой таблице. Итак, мы получаем:
«А», «В»
'А', 'C',
'ОБЪЯВЛЕНИЕ'
'B', 'B'
'ДО НАШЕЙ ЭРЫ'
'B', 'D'
Для приведенного вами примера оператора SQL вы возвращаете INNER JOIN. Что касается разницы между INNER JOIN и CROSS JOIN, вышеприведенный пример должен был проиллюстрировать различия, но для INNER JOIN вы изучаете минимальное количество строк, а для CROSS JOIN вы изучаете максимально возможное число рядов. В общем, если вы исследуете план для запроса SQL и обнаруживаете, что в плане используется CROSS JOIN, чаще всего вы сталкиваетесь с ошибкой в вашем SQL, поскольку перекрестные объединения имеют тенденцию быть чрезвычайно трудоемкими и интенсивно вводить / выводить .