Когда этот T-SQL стал некорректным? Или всегда?

Почему следующие (два последних) утверждения возвращают разные результаты. Я почти на 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
5
задан Fredrik Johansson 5 May 2011 в 11:38
поделиться