IN (Transact-SQL)IN (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Determina si un valor especificado coincide con algún valor de una subconsulta o una lista.Determines whether a specified value matches any value in a subquery or a list.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

test_expression [ NOT ] IN   
    ( subquery | expression [ ,...n ]  
    )   

ArgumentosArguments

test_expressiontest_expression
Es cualquier expresión válida.Is any valid expression.

subquerysubquery
Es una subconsulta que tiene un conjunto de resultados de una columna.Is a subquery that has a result set of one column. Esta columna debe tener el mismo tipo de datos que test_expression.This column must have the same data type as test_expression.

expression[ , ... n ]expression[ ,... n ]
Es una lista de expresiones en la que se buscará una coincidencia.Is a list of expressions to test for a match. Todas las expresiones deben ser del mismo tipo que test_expression.All expressions must be of the same type as test_expression.

Tipos de resultadoResult Types

BooleanBoolean

Valor del resultadoResult Value

Si el valor de test_expression es igual a cualquier valor devuelto por subquery o si es igual a cualquier expression de la lista separada por comas, el valor devuelto es TRUE; en caso contrario, el valor del resultado es FALSE.If the value of test_expression is equal to any value returned by subquery or is equal to any expression from the comma-separated list, the result value is TRUE; otherwise, the result value is FALSE.

El uso de NOT IN niega el valor de subquery o de expression.Using NOT IN negates the subquery value or expression.

Precaución

Los valores NULL que devuelve subquery o expression comparados con test_expression por medio de IN o NOT IN devuelven UNKNOWN.Any null values returned by subquery or expression that are compared to test_expression using IN or NOT IN return UNKNOWN. La utilización de valores NULL con IN o NOT IN puede provocar resultados inesperados.Using null values in together with IN or NOT IN can produce unexpected results.

NotasRemarks

Si se incluye de manera explícita un número sumamente grande de valores (muchos miles de valores separados por comas) entre paréntesis en una cláusula IN, se pueden agotar los recursos y recibir los errores 8623 o 8632.Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses, in an IN clause can consume resources and return errors 8623 or 8632. Para evitar este problema, almacene los elementos de la lista IN en una tabla y use una subconsulta SELECT en una cláusula IN.To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN clause.

Error 8623:Error 8623:

The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

Error 8632:Error 8632:

Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.

EjemplosExamples

A.A. Comparar OR e INComparing OR and IN

En el ejemplo siguiente se selecciona una lista con los nombres de los empleados que son ingenieros de diseño, ingenieros de herramientas o asistentes de marketing.The following example selects a list of the names of employees who are design engineers, tool designers, or marketing assistants.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle = 'Design Engineer'   
   OR e.JobTitle = 'Tool Designer'   
   OR e.JobTitle = 'Marketing Assistant';  
GO  

No obstante, con IN se recuperan los mismos resultados.However, you retrieve the same results by using IN.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');  
GO  

Éste es el conjunto de resultados que se obtiene con cualquiera de las dos consultas.Here is the result set from either query.

FirstName   LastName      Title  
---------   ---------   ---------------------  
Sharon      Salavaria   Design Engineer                                     
Gail        Erickson    Design Engineer                                     
Jossef      Goldberg    Design Engineer                                     
Janice      Galvin      Tool Designer                                       
Thierry     D'Hers      Tool Designer                                       
Wanida      Benshoof    Marketing Assistant                                 
Kevin       Brown       Marketing Assistant                                 
Mary        Dempsey     Marketing Assistant                                 
  
(8 row(s) affected)  

B.B. Utilizar IN con una subconsultaUsing IN with a subquery

En el ejemplo siguiente se buscan todos los identificadores de vendedor de la tabla SalesPerson para los empleados cuya cuota de ventas sea superior a 250.000 dólares al año y, después, se seleccionan en la tabla Employee los nombres de todos los empleados cuyo EmployeeID coincida con los resultados de la subconsulta SELECT.The following example finds all IDs for the salespeople in the SalesPerson table for employees who have a sales quota greater than $250,000 for the year, and then selects from the Employee table the names of all employees where EmployeeID that match the results from the SELECT subquery.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

El conjunto de resultados es el siguiente.Here is the result set.

FirstName   LastName                                             
---------   --------   
Tsvi         Reiter                                              
Michael      Blythe                                              
Tete         Mensa-Annan                                         
  
(3 row(s) affected)  

C.C. Utilizar NOT IN con una subconsultaUsing NOT IN with a subquery

En el ejemplo siguiente se buscan los vendedores con una cuota inferior a 250.000 dólares.The following example finds the salespersons who do not have a quota greater than $250,000. NOT IN busca los vendedores que no coinciden con los elementos de la lista de valores.NOT IN finds the salespersons who do not match the items in the values list.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID NOT IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

Ejemplos: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Almacenamiento de datos paralelosParallel Data Warehouse

D.D. Usar IN y NOT INUsing IN and NOT IN

En el siguiente ejemplo se encuentran todas las entradas de la tabla FactInternetSales que coinciden con los valores de SalesReasonKey de la tabla DimSalesReason.The following example finds all entries in the FactInternetSales table that match SalesReasonKey values in the DimSalesReason table.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
IN (SELECT SalesReasonKey FROM DimSalesReason);   

En el siguiente ejemplo se encuentran todas las entradas de la tabla FactInternetSalesReason que no coinciden con los valores de SalesReasonKey de la tabla DimSalesReason.The following example finds all entries in the FactInternetSalesReason table that do not match SalesReasonKey values in the DimSalesReason table.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);  

E.E. Usar IN con una lista de expresionesUsing IN with an expression list

En el siguiente ejemplo se encuentran todos los identificadores de los vendedores de la tabla DimEmployee pertenecientes a aquellos empleados cuyo nombre es Mike o Michael.The following example finds all IDs for the salespeople in the DimEmployee table for employees who have a first name that is either Mike or Michael.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName  
FROM DimEmployee  
WHERE FirstName IN ('Mike', 'Michael');  

Consulte tambiénSee Also

CASE (Transact-SQL) CASE (Transact-SQL)
Expresiones (Transact-SQL) Expressions (Transact-SQL)
Funciones integradas (Transact-SQL) Built-in Functions (Transact-SQL)
Operadores (Transact-SQL) Operators (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL) WHERE (Transact-SQL)
ALL (Transact-SQL) ALL (Transact-SQL)
SOME | ANY (Transact-SQL)SOME | ANY (Transact-SQL)