Không hẳn, bởi vì RIGHT JOIN và LEFT JOIN là đối xứng. Đó là:
A LEFT JOIN B = B RIGHT JOIN A
RIGHT JOIN chỉ đơn thuần là đường cú pháp. Trình tối ưu hóa có thể viết lại một phép nối phải thành một phép nối bên trái:
mysql> explain extended select * from t right join t t2 using (c1)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t2
type: index
possible_keys: NULL
key: c2
key_len: 5
ref: NULL
rows: 4201
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: t
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: test.t2.c1
rows: 1
filtered: 100.00
Extra:
2 rows in set, 1 warning (0.00 sec)
Lưu ý THAM GIA TRÁI trong việc ghi lại trình tối ưu hóa (các bảng được hoán đổi):
mysql> show warnings\G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: select `test`.`t2`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t`.`c2` AS
`c2` from `test`.`t` `t2` left join `test`.`t` on((`test`.`t`.`c1` = `test`.`t2`.`c1`)) where 1
1 row in set (0.00 sec)
Lưu ý rằng (A RIGHT JOIN B! =A LEFT JOIN B) trừ khi (A INNER JOIN B =A LEFT JOIN B). Điều này là do A RIGHT JOIN B không đối xứng với A LEFT JOIN B (nó đối xứng với B LEFT JOIN A).
Trong trường hợp của bạn, A RIGHT JOIN B sẽ giống như A LEFT JOIN B trừ khi có giá trị NULL trong các cột bạn đang tham gia. Nếu có giá trị NULL, thì A LEFT JOIN B sẽ KHÔNG giống A RIGHT JOIN B. Nếu bạn thêm các bài báo mới mà không thêm nhóm tin được liên kết (hoặc ngược lại) thì kết quả cũng sẽ thay đổi.