Во-первых, ваше объединение производит декартово произведение.
create table A(c1 int, c2 int);
create table B(c1 int, c2 int);
insert into A(c1, c2) values(1641, 1468), (1, 5);
insert into B(c1, c2) values(1641, 1468), (1, 5);
select * from A, B;
Что приведет к:
+------+------+------+------+
| A.c1 | A.c2 | B.c1 | B.c2 |
+------+------+------+------+
| 1641 | 1468 | 1641 | 1468 |
| 1 | 5 | 1641 | 1468 |
| 1641 | 1468 | 1 | 5 |
| 1 | 5 | 1 | 5 |
+------+------+------+------+
Таким образом, при выполнении запроса предложение where будет ограничивать первую строку и последнюю строку. Что оставит нас с:
+------+------+------+------+
| A.c1 | A.c2 | B.c1 | B.c2 |
+------+------+------+------+
| 1 | 5 | 1641 | 1468 |
| 1641 | 1468 | 1 | 5 |
+------+------+------+------+
И выполнение вашего полного запроса приведет к:
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1468 |
| 1641 | 5 |
+------+------+
Но мы можем построить несколько строк, чтобы получить их независимо от того, что вы используете A.c1
и B.c2
:
insert into A(c1, c2) values(1641, 5);
insert into B(c1, c2) values(1, 1468);
Что приведет к ряду с [1641, 1468].