Я не понимаю, почему правильное объединение не возвращает результаты, как ожидалось.
Когда условие очистки говорит, что возвращает только результаты с:
R.REIN_SRT = 'A' AND R.REIN_STA = '9'
, но вместо этого возвращает все в таблицеТочно так же, как нет условия «где»:
+----------+-------------+----------+----------+----------+
| INVE_KEY | INVE_NME | INVE_KEY | REIN_SRT | REIN_STA |
+----------+-------------+----------+----------+----------+
| NULL | NULL | 1 | S | 1 |
| 1 | CHAIR BLACK | 1 | A | 9 |
| NULL | NULL | 1 | B | 2 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
| NULL | NULL | 1 | S | 1 |
+----------+-------------+----------+----------+----------+
Почему условие «где» работает не так, как ожидалось?
Вот весь пример:
DECLARE @JEINVE TABLE
(
INVE_KEY INT,
INVE_NME VARCHAR(100)
)
DECLARE @JEREIN TABLE
(
INVE_KEY INT,
REIN_SRT CHAR(1),
REIN_STA CHAR(1)
)
INSERT INTO @JEINVE(INVE_KEY, INVE_NME)
VALUES(1, 'CHAIR BLACK'),(2, 'WHITE TABLE'),(3, 'BLACK CANDLE')
INSERT INTO @JEREIN(INVE_KEY,REIN_SRT,REIN_STA)
VALUES(1,'S','1'),(1,'A','9'),(1,'B','2'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1'),(1,'S','1')
SELECT *
FROM @JEINVE INVE RIGHT JOIN @JEREIN R
ON INVE.INVE_KEY = R.INVE_KEY
AND R.REIN_SRT = 'A' AND R.REIN_STA = '9'