Оба из них являются действительным синтаксисом ISO / ANSI Full SQL-92:
SELECT a.*
FROM Accounts a
INNER JOIN
( VALUES('0123456', '2000897'), ('0125556', '2000866')
) AS v(TaxID, AccountNumber)
ON (a.TaxID, a.AccountNumber) = (v.TaxID, v.AccountNumber)
SELECT *
FROM Accounts a
WHERE (a.TaxID, a.AccountNumber) IN
( VALUES ('0123456', '2000897'), ('0125556', '2000866') )
Но я не думаю, что любой из них работает в любой текущей СУБД.
Это также допустимый полный синтаксис SQL-92 (он не работает в SQL-Server 2008 из-за NATURAL JOIN
):
SELECT a.*
FROM Accounts a
NATURAL JOIN
( VALUES('0123456', '2000897'), ('0125556', '2000866')
) AS v(TaxID, AccountNumber)
Это также допустимый SQL (не уверен, если онв спецификации 92 или более поздней версии) - и есть то, что у вас есть (но с использованием скобок, а не фигурных скобок).
Поддерживается MySQL, Postgres, DB2 (но не SQL Server):
SELECT a.*
FROM Accounts a
WHERE (TaxID, AccountNumber) IN
( ('0123456', '2000897'), ('0125556', '2000866') )
;
В DBA.SE был похожий вопрос, с различными другими способами сформулировать это:
выбор расположения двух столбцов в наборе