Почему следующие (два последних) утверждения возвращают разные результаты. Я почти на 100% уверен, что они «использовали» для возврата того же результата (кто-нибудь помнит, как это было раньше на сервере SQL 6/2000?).
CREATE TABLE [dbo].[color](
[colorid] [int] NOT NULL,
[title] [varchar](255) NOT NULL
) ON [PRIMARY]
INSERT color SELECT 1,'Red' UNION ALL SELECT 2,'Green' UNION ALL SELECT 3,'Blue'
CREATE TABLE [dbo].[membercolor](
[memberid] [int] NOT NULL,
[colorid] [int] NOT NULL
) ON [PRIMARY]
INSERT membercolor SELECT 10,1 UNION ALL SELECT 10,2 UNION ALL SELECT 10,3 UNION ALL SELECT 11,1 UNION ALL SELECT 11,2 UNION ALL SELECT 12,1
SELECT * FROM color
SELECT * FROM membercolor
-- red, green & blue
SELECT * FROM color a LEFT JOIN membercolor b
ON a.colorid=b.colorid AND b.memberid=11
-- red, green - but why?
SELECT * FROM color a LEFT JOIN membercolor b
ON a.colorid=b.colorid WHERE b.memberid IS NULL OR b.memberid=11