Проверьте это:
TblJob
Name, Surname, Job
John, White, Developer
John, Black, Tester
John, Grey, Manager
TblDrinksPref
Name, Surname, Drink
John, White, Coffee
John, Black, Tea
John, Grey, Orange Juice
SELECT * FROM tbljob j JOIN tbldrinkspref p ON j.name = p.name
John, White, Developer, John, White, Coffee
John, White, Developer, John, Black, Tea
John, White, Developer, John, Grey, Orange Juice
John, Black, Tester, John, White, Coffee
John, Black, Tester, John, Black, Tea
John, Black, Tester, John, Grey, Orange Juice
John, Grey, Manager, John, White, Coffee
John, Grey, Manager, John, Black, Tea
John, Grey, Manager, John, Grey, Orange Juice
Объединив только имя, каждая строка в каждой таблице совпадает с другой. 3 строки в каждой таблице приводят к выводу таблиц 3х3; больше, чем сумма строк. Большинство строк, которые вы получите из объединения, - это умножение количества строк, входящих в соединение. Мы называем это декартовым продуктом, и это обычно указывает на ошибку в ваших SQL соединениях. Это может сделать любое объединение, а не только внешние. Существует объединение (называемое CROSS JOIN), единственной целью которого является создание вывода, представляющего собой идеальный декартовой продукт, потому что иногда мы действительно хотим это сделать, но в основном это указывает на проблему
Что вы можете с этим поделать ? Не объединяйте строки в несвязанные строки, делая ваши условия объединения лучше / точнее:
SELECT *
FROM tbljob j JOIN tbldrinkspref p
ON j.name = p.name
--the last name is vital to associate rows correctly in this case
AND j.surname = p.surname
Если вы написали большой SQL и неожиданно дублировали некоторые строки, это означает, что один из ваши соединения неисправны. Закомментируйте их все обратно только к первой таблице и закомментируйте блок выбора, затем продолжайте повторный запуск sql при добавлении объединений обратно. Когда вы видите неожиданное увеличение количества строк, возможно, это сбой, но помните, что объединение может вызвать строки тоже исчезают, и вы можете оказаться в ситуации, когда добавление объединения может привести к тому, что половина строк исчезнет, потому что они не соответствуют предикату соединения, а другая половина строк удвоится, потому что соединение ошибочно. Вы должны иметь в виду данные, к которым вы присоединяетесь, при оценке того, как должно измениться количество строк в результате добавления таблицы, в отличие от того, как она действительно изменяется