Operadores de conjuntos: EXCEPT e INTERSECT (Transact-SQL)Set Operators - EXCEPT and INTERSECT (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

Devuelve filas distintas al comparar los resultados de dos consultas.Returns distinct rows by comparing the results of two queries.

EXCEPT devuelve filas distintas de la consulta de entrada izquierda que no son de salida en la consulta de entrada derecha.EXCEPT returns distinct rows from the left input query that aren't output by the right input query.

INTERSECT devuelve filas distintas que son el resultado del operador de las consultas de entrada izquierda y derecha.INTERSECT returns distinct rows that are output by both the left and right input queries operator.

Para combinar los conjuntos de resultados de dos consultas que usan EXCEPT o INTERSECT, las reglas básicas son:To combine the result sets of two queries that use EXCEPT or INTERSECT, the basic rules are:

  • El número y el orden de las columnas debe ser el mismo en todas las consultas.The number and the order of the columns must be the same in all queries.

  • Los tipos de datos deben ser compatibles.The data types must be compatible.

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

SintaxisSyntax

{ <query_specification> | ( <query_expression> ) }   
{ EXCEPT | INTERSECT }  
{ <query_specification> | ( <query_expression> ) }  

ArgumentosArguments

<query_specification> | ( <query_expression> )<query_specification> | ( <query_expression> )
Es una especificación o expresión de consulta que devuelve datos que se van a comparar con los de otra especificación o expresión de consulta.Is a query specification or query expression that returns data to be compared with the data from another query specification or query expression. No es preciso que las definiciones de las columnas que forman parte de una operación EXCEPT o INTERSECT sean idénticas.The definitions of the columns that are part of an EXCEPT or INTERSECT operation don't have to be the same. Sin embargo, deben ser comparables mediante una conversión implícita.But, they must be comparable through implicit conversion. Cuando los tipos de datos difieren, las reglas de prioridad de tipo de datos determinan el tipo de datos que se ejecuta para la comparación.When data types differ, the rules for data type precedence determine the data type that is run for comparison.

El resultado se basa en las mismas reglas para combinar expresiones cuando los tipos son los mismos pero varían en cuanto a precisión, escala o longitud.The result is based on the same rules for combining expressions when the types are the same but differ in precision, scale, or length. Para más información, vea Precisión, escala y longitud (Transact-SQL).For more information, see Precision, Scale, and Length (Transact-SQL).

La especificación o expresión de consulta no puede devolver columnas de tipo xml, text, ntext, image o no binario definido por el usuario CLR, ya que estos tipos de datos no son comparables.The query specification or expression can't return xml, text, ntext, image, or nonbinary CLR user-defined type columns because these data types aren't comparable.

EXCEPTEXCEPT
Devuelve todos los valores distintos de la consulta del lado izquierdo del operador EXCEPT.Returns any distinct values from the query left of the EXCEPT operator. Esos valores se devuelven siempre que la consulta correcta no los devuelva también.Those values return as long the right query doesn't return those values as well.

INTERSECTINTERSECT
Devuelve los valores distintos devueltos por las consultas situadas a los lados izquierdo y derecho del operador INTERSECT.Returns any distinct values that are returned by both the query on the left and right sides of the INTERSECT operator.

ObservacionesRemarks

Los tipos de datos de las columnas comparables los devuelven las consultas de los lados izquierdo y derecho de los operadores EXCEPT o INTERSECT.The data types of comparable columns are returned by the queries left and right of the EXCEPT or INTERSECT operators. Estos tipos de datos pueden incluir tipos de datos de caracteres con intercalaciones diferentes.These data types can include character data types with different collations. Cuando lo hacen, la comparación requerida se ejecuta según las reglas de prioridad de intercalación.When they do, the required comparison is run according to the rules of collation precedence. Si no puede ejecutar esta conversión, el Motor de base de datos de SQL ServerSQL Server Database Engine devuelve un error.If you can't run this conversion, the Motor de base de datos de SQL ServerSQL Server Database Engine returns an error.

Cuando se comparan los valores de columna para determinar filas DISTINCT, dos valores NULL se consideran equivalentes.When comparing column values for determining DISTINCT rows, two NULL values are considered equal.

EXCEPT e INTERSECT devuelven los nombres de columna del conjunto de resultados que son los mismos que los nombres de columna devueltos por la consulta del lado izquierdo del operador.EXCEPT and INTERSECT return the result set's column names that are the same as the column names that the query on the operator's left side returns.

Los nombres o alias de columna de las cláusulas ORDER BY deben hacer referencia a los nombres de columna devueltos por la consulta del lado izquierdo.Column names or aliases in ORDER BY clauses must reference column names returned by the left-side query.

La nulabilidad de cualquier columna del conjunto de resultados devueltos por EXCEPT o INTERSECT es la misma que la de la columna correspondiente devuelta por la consulta del lado izquierdo del operador.The nullability of any column in the result set returned by EXCEPT or INTERSECT is the same as the nullability of the corresponding column that is returned by the query on the operator's left side.

Si EXCEPT o INTERSECT se utilizan con otros operadores en una expresión, esta se evalúa en el contexto de la siguiente prioridad:If EXCEPT or INTERSECT is used together with other operators in an expression, it's evaluated in the context of the following precedence:

  1. Expresiones entre paréntesisExpressions in parentheses

  2. El operador INTERSECTThe INTERSECT operator

  3. EXCEPT y UNION se evalúan de izquierda a derecha según su posición en la expresiónEXCEPT and UNION evaluated from left to right based on their position in the expression

Puede usar EXCEPT o INTERSECT para comparar más de dos conjuntos de consultas.You can use EXCEPT or INTERSECT to compare more than two sets of queries. Al hacerlo, la conversión del tipo de datos se determina al comparar dos consultas a la vez y mediante las reglas de evaluación de expresiones mencionadas anteriormente.When you do, data type conversion is determined by comparing two queries at a time, and following the previously mentioned rules of expression evaluation.

EXCEPT e INTERSECT no se pueden usar en definiciones de vistas distribuidas con particiones ni en notificaciones de consultas.EXCEPT and INTERSECT can't be used in distributed partitioned view definitions, query notifications.

EXCEPT e INTERSECT se pueden utilizar en consultas distribuidas, pero solo se ejecutan en el servidor local y no se insertan en el servidor vinculado.EXCEPT and INTERSECT may be used in distributed queries, but are only executed on the local server and not pushed to the linked server. De esta forma, el uso de EXCEPT e INTERSECT en consultas distribuidas puede afectar al rendimiento.As such, using EXCEPT and INTERSECT in distributed queries may affect performance.

Puede usar los cursores de solo avance rápido y estáticos en el conjunto de resultados si se utilizan con una operación EXCEPT o INTERSECT.You can use fast forward-only and static cursors in the result set when they're used with an EXCEPT or INTERSECT operation. También puede utilizar un cursor dinámico o controlado por conjunto de claves junto con una operación EXCEPT o INTERSECT.You can also use a keyset-driven or dynamic cursor together with an EXCEPT or INTERSECT operation. Al hacerlo, el cursor del conjunto de resultados de la operación se convierte en un cursor estático.When you do, the cursor of the operation result set is converted to a static cursor.

Cuando una operación EXCEPT se muestra a través de la característica Plan de presentación gráfico de SQL Server Management StudioSQL Server Management Studio, la operación aparece como un operador left anti semi join y la operación INTERSECT, como un operador left semi join.When an EXCEPT operation is displayed by using the Graphical Showplan feature in SQL Server Management StudioSQL Server Management Studio, the operation appears as a left anti semi join, and an INTERSECT operation appears as a left semi join.

EjemplosExamples

En los siguientes ejemplos se indica cómo usar los operadores INTERSECT y EXCEPT.The following examples show using the INTERSECT and EXCEPT operators. La primera consulta devuelve todos los valores de la tabla Production.Product para comparar los resultados con INTERSECT y EXCEPT.The first query returns all values from the Production.Product table for comparison to the results with INTERSECT and EXCEPT.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product ;  
--Result: 504 Rows  

La siguiente consulta devuelve los valores distintos devueltos por las consultas situadas a los lados izquierdo y derecho del operador INTERSECT.The following query returns any distinct values that are returned by both the query on the left and right sides of the INTERSECT operator.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product  
INTERSECT  
SELECT ProductID   
FROM Production.WorkOrder ;  
--Result: 238 Rows (products that have work orders)  

La siguiente consulta devuelve los valores distintos de la consulta del lado izquierdo del operador EXCEPT que tampoco se encuentran en la consulta derecha.The following query returns any distinct values from the query left of the EXCEPT operator that aren't also found on the right query.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product  
EXCEPT  
SELECT ProductID   
FROM Production.WorkOrder ;  
--Result: 266 Rows (products without work orders)  

La siguiente consulta devuelve los valores distintos de la consulta del lado izquierdo del operador EXCEPT que tampoco se encuentran en la consulta derecha.The following query returns any distinct values from the query left of the EXCEPT operator that aren't also found on the right query. Las tablas se invierten respecto al ejemplo anterior.The tables are reversed from the previous example.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.WorkOrder  
EXCEPT  
SELECT ProductID   
FROM Production.Product ;  
--Result: 0 Rows (work orders without products)  

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

En los siguientes ejemplos se muestra el modo de usar los operadores INTERSECT y EXCEPT.The following examples show how to use the INTERSECT and EXCEPT operators. La primera consulta devuelve todos los valores de la tabla FactInternetSales para comparar los resultados con INTERSECT y EXCEPT.The first query returns all values from the FactInternetSales table for comparison to the results with INTERSECT and EXCEPT.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales;  
--Result: 60398 Rows  

La siguiente consulta devuelve los valores distintos devueltos por las consultas situadas a los lados izquierdo y derecho del operador INTERSECT.The following query returns any distinct values that are returned by both the query on the left and right sides of the INTERSECT operator.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
INTERSECT   
SELECT CustomerKey   
FROM DimCustomer   
WHERE DimCustomer.Gender = 'F'  
ORDER BY CustomerKey;  
--Result: 9133 Rows (Sales to customers that are female.)  

La siguiente consulta devuelve los valores distintos de la consulta del lado izquierdo del operador EXCEPT que tampoco se encuentran en la consulta derecha.The following query returns any distinct values from the query left of the EXCEPT operator that aren't also found on the right query.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
EXCEPT   
SELECT CustomerKey   
FROM DimCustomer   
WHERE DimCustomer.Gender = 'F'  
ORDER BY CustomerKey;  
--Result: 9351 Rows (Sales to customers that are not female.)