我有一个带有子选择的查询,其中我输入了错误的列(子选择中的 id1)。如果单独执行查询,SQL Server 会抛出一个错误,这是正确的和预期的。但是,如果在以下上下文中作为子查询执行,则不会捕获错字 - 在这种情况下,我的表被清除。这是故意的行为吗?
CREATE TABLE #a1 (id1 INT);
CREATE TABLE #a2 (id2 INT);
INSERT INTO #a1 (id1) VALUES (1), (2), (3);
INSERT INTO #a2 (id2) VALUES (1);
DELETE FROM #a1 WHERE id1 = (SELECT id1 FROM #a2 WHERE id2 = 1);
SELECT * FROM #a1 -- wow, the table is now empty
我预计会抛出一个错误,而不是删除查询被解释为
DELETE FROM #a1 WHERE id1 = id1.