Ogni batch SQL deve rientrare nel limite della dimensione del batch:65.536 * Dimensione del pacchetto di rete.
A parte questo, la tua query è limitata dalle condizioni di runtime. Di solito esaurirà le dimensioni dello stack perché x IN (a,b,c) non è altro che x=a OR x=b OR x=c che crea un albero delle espressioni simile a x=a OR (x=b OR (x =c)), quindi diventa molto profondo con un gran numero di OR. SQL 7 colpirebbe un SO a circa 10.000 valori in IN, ma oggi gli stack sono molto più profondi (a causa di x64), quindi può andare abbastanza in profondità.
Aggiorna
Hai già trovato l'articolo di Erland sull'argomento del passaggio di elenchi/array a SQL Server. Con SQL 2008 hai anche parametri con valori di tabella che ti consentono di passare un intero DataTable come parametro di tipo tabella singola e unirti su di esso.
XML e XPath sono un'altra soluzione praticabile:
SELECT ...
FROM Table
JOIN (
SELECT x.value(N'.',N'uniqueidentifier') as guid
FROM @values.nodes(N'/guids/guid') t(x)) as guids
ON Table.guid = guids.guid;