SELECT TOP 10 * FROM T_User
WHERE ID NOT IN (SELECT TOP 0 * FROM T_User ORDER BY ID ASC)
NOT IN 子查詢必須返回單列,但 SELECT TOP 0 * 返回所有列(或零列),導致「當沒有用 EXISTS 引入子查詢時,在選擇列表中只能指定一個表達式」。
-- 正確:子查詢只選 ID 列
SELECT TOP 10 * FROM T_User
WHERE ID NOT IN (SELECT TOP 20 ID FROM T_User ORDER BY ID ASC)
-- 更推薦:使用 NOT EXISTS 避免 NULL 值陷阱
SELECT TOP 10 * FROM T_User u1
WHERE NOT EXISTS (SELECT 1 FROM T_User u2 WHERE u2.ID = u1.ID ORDER BY u2.ID ASC OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY)
IN / NOT IN 時,必須只選擇一列,且該列類型與外層匹配。EXISTS / NOT EXISTS,性能更好且語義清晰,不受 NULL 影響。TOP 0 無實際意義,可能是調試殘留,應刪除或改為具體行數。SELECT * FROM T_User
ORDER BY ID
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;