Cláusula FROM más JOIN, APPLY, PIVOT (Transact-SQL)FROM clause plus JOIN, APPLY, PIVOT (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

En Transact-SQL, la cláusula FROM está disponible en las siguientes instrucciones:In Transact-SQL, the FROM clause is available on the following statements:

Normalmente, la cláusula FROM es necesaria en la instrucción SELECT.The FROM clause is usually required on the SELECT statement. La excepción se produce cuando no hay columnas de tablas enumeradas, y los únicos elementos que se muestran son literales, variables o expresiones aritméticas.The exception is when no table columns are listed, and the only items listed are literals or variables or arithmetic expressions.

En este artículo también se tratan las siguientes palabras clave, que se pueden usar en la cláusula FROM:This article also discusses the following keywords that can be used on the FROM clause:

  • JOINJOIN
  • APPLYAPPLY
  • PIVOTPIVOT

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

SintaxisSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
[ FROM { <table_source> } [ ,...n ] ]   
<table_source> ::=   
{  
    table_or_view_name [ [ AS ] table_alias ]   
        [ <tablesample_clause> ]   
        [ WITH ( < table_hint > [ [ , ]...n ] ) ]   
    | rowset_function [ [ AS ] table_alias ]   
        [ ( bulk_column_alias [ ,...n ] ) ]   
    | user_defined_function [ [ AS ] table_alias ]  
    | OPENXML <openxml_clause>   
    | derived_table [ [ AS ] table_alias ] [ ( column_alias [ ,...n ] ) ]   
    | <joined_table>   
    | <pivoted_table>   
    | <unpivoted_table>  
    | @variable [ [ AS ] table_alias ]  
    | @variable.function_call ( expression [ ,...n ] )   
        [ [ AS ] table_alias ] [ (column_alias [ ,...n ] ) ]  
    | FOR SYSTEM_TIME <system_time>   
}  
<tablesample_clause> ::=  
    TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] )   
        [ REPEATABLE ( repeat_seed ) ]   
  
<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON <search_condition>   
    | <table_source> CROSS JOIN <table_source>   
    | left_table_source { CROSS | OUTER } APPLY right_table_source   
    | [ ( ] <joined_table> [ ) ]   
}  
<join_type> ::=   
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]  
    JOIN  
  
<pivoted_table> ::=  
    table_source PIVOT <pivot_clause> [ [ AS ] table_alias ]  
  
<pivot_clause> ::=  
        ( aggregate_function ( value_column [ [ , ]...n ])   
        FOR pivot_column   
        IN ( <column_list> )   
    )   
  
<unpivoted_table> ::=  
    table_source UNPIVOT <unpivot_clause> [ [ AS ] table_alias ]  
  
<unpivot_clause> ::=  
    ( value_column FOR pivot_column IN ( <column_list> ) )   
  
<column_list> ::=  
    column_name [ ,...n ]   
  
<system_time> ::=  
{  
       AS OF <date_time>  
    |  FROM <start_date_time> TO <end_date_time>  
    |  BETWEEN <start_date_time> AND <end_date_time>  
    |  CONTAINED IN (<start_date_time> , <end_date_time>)   
    |  ALL  
}  
  
    <date_time>::=  
        <date_time_literal> | @date_time_variable  
  
    <start_date_time>::=  
        <date_time_literal> | @date_time_variable  
  
    <end_date_time>::=  
        <date_time_literal> | @date_time_variable  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
FROM { <table_source> [ ,...n ] }  
  
<table_source> ::=   
{  
    [ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias 
    [<tablesample_clause>]  
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]  
    | <joined_table>  
}  
  
<tablesample_clause> ::=
    TABLESAMPLE ( sample_number [ PERCENT ] ) -- SQL Data Warehouse only  
 
<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON search_condition   
    | <table_source> CROSS JOIN <table_source> 
    | left_table_source { CROSS | OUTER } APPLY right_table_source   
    | [ ( ] <joined_table> [ ) ]   
}  
  
<join_type> ::=   
    [ INNER ] [ <join hint> ] JOIN  
    | LEFT  [ OUTER ] JOIN  
    | RIGHT [ OUTER ] JOIN  
    | FULL  [ OUTER ] JOIN  
  
<join_hint> ::=   
    REDUCE  
    | REPLICATE  
    | REDISTRIBUTE  

ArgumentosArguments

<table_source><table_source>
Especifica el origen de una tabla, una vista, una tabla variable o una tabla derivada, con o sin alias, para utilizarlo en la instrucción Transact-SQLTransact-SQL.Specifies a table, view, table variable, or derived table source, with or without an alias, to use in the Transact-SQLTransact-SQL statement. Se pueden utilizar hasta 256 orígenes de tabla en una instrucción, aunque el límite varía en función de la memoria disponible y de la complejidad del resto de las expresiones de la consulta.Up to 256 table sources can be used in a statement, although the limit varies depending on available memory and the complexity of other expressions in the query. Las consultas individuales pueden no admitir un máximo de 256 orígenes de tabla.Individual queries may not support up to 256 table sources.

Nota

El rendimiento de las consultas se puede ver afectado si se hace referencia a un número elevado de tablas en ellas.Query performance may suffer with lots of tables referenced in a query. El tiempo de compilación y optimización también se puede ver afectado por factores adicionales.Compilation and optimization time is also affected by additional factors. Estos incluyen la presencia de índices y vistas indizadas en cada <table_source> y el tamaño de <select_list> en la instrucción SELECT.These include the presence of indexes and indexed views on each <table_source> and the size of the <select_list> in the SELECT statement.

El orden de los orígenes de tabla después de la palabra clave FROM no afecta al conjunto de resultados devuelto.The order of table sources after the FROM keyword does not affect the result set that is returned. SQL ServerSQL Server devuelve errores si aparecen nombres duplicados en la cláusula FROM.returns errors when duplicate names appear in the FROM clause.

table_or_view_nametable_or_view_name
Es el nombre de una tabla o una vista.Is the name of a table or view.

Si la tabla o la vista existen en otra base de datos de la misma instancia de SQL ServerSQL Server, use un nombre completo con el formato database.schema.object_name.If the table or view exists in another database on the same instance of SQL ServerSQL Server, use a fully qualified name in the form database.schema.object_name.

Si la tabla o la vista existen fuera de la instancia de SQL ServerSQL Server, use un nombre de cuatro partes con el formato linked_server.catalog.schema.object.If the table or view exists outside the instance of SQL ServerSQL Serverl, use a four-part name in the form linked_server.catalog.schema.object. Para obtener más información, vea sp_addlinkedserver (Transact-SQL).For more information, see sp_addlinkedserver (Transact-SQL). Un nombre de cuatro partes creado con la función OPENDATASOURCE como la parte de servidor del nombre también se puede usar para especificar el origen de tabla remoto.A four-part name that is constructed by using the OPENDATASOURCE function as the server part of the name can also be used to specify the remote table source. Cuando se especifica OPENDATASOURCE, es posible que database_name y schema_name no se apliquen a todos los orígenes de datos y dependan de las capacidades del proveedor OLE DB que accede al objeto remoto.When OPENDATASOURCE is specified, database_name and schema_name may not apply to all data sources and is subject to the capabilities of the OLE DB provider that accesses the remote object.

[AS] table_alias[AS] table_alias
Es un alias para table_source que se puede usar por comodidad o para distinguir una tabla o una vista en una autocombinación o una subconsulta.Is an alias for table_source that can be used either for convenience or to distinguish a table or view in a self-join or subquery. El alias suele ser un nombre de tabla abreviado que se utiliza para hacer referencia a columnas específicas de las tablas en una combinación.An alias is frequently a shortened table name used to refer to specific columns of the tables in a join. Si el mismo nombre de columna existe en más de una tabla en una combinación, SQL ServerSQL Server requiere que el nombre de columna sea calificado mediante un nombre de tabla, un nombre de vista o un alias.If the same column name exists in more than one table in the join, SQL ServerSQL Server requires that the column name be qualified by a table name, view name, or alias. No se puede utilizar el nombre de la tabla si se ha definido un alias.The table name cannot be used if an alias is defined.

Si se usa una tabla derivada, una función de conjuntos de filas o con valores de tabla, o una cláusula de operador (como PIVOT o UNPIVOT), el parámetro table_alias requerido al final de la cláusula es el nombre de tabla asociado para todas las columnas devueltas, incluidas las columnas de agrupación.When a derived table, rowset or table-valued function, or operator clause (such as PIVOT or UNPIVOT) is used, the required table_alias at the end of the clause is the associated table name for all columns, including grouping columns, returned.

WITH (<table_hint> )WITH (<table_hint> )
Especifica que el optimizador de consultas utiliza una estrategia de optimización o bloqueo con esta tabla y para esta instrucción.Specifies that the query optimizer use an optimization or locking strategy with this table and for this statement. Para obtener más información, vea Sugerencias de tabla (Transact-SQL).For more information, see Table Hints (Transact-SQL).

rowset_functionrowset_function

Se aplica a: SQL Server 2008SQL Server 2008 a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server and SQL DatabaseSQL Database.

Especifica una de las funciones de conjuntos de filas, como OPENROWSET, que devuelve un objeto que se puede utilizar en lugar de una referencia de tabla.Specifies one of the rowset functions, such as OPENROWSET, that returns an object that can be used instead of a table reference. Para obtener más información sobre la lista de funciones de conjuntos de filas, vea Funciones de conjuntos de filas (Transact-SQL).For more information about a list of rowset functions, see Rowset Functions (Transact-SQL).

El uso de las funciones OPENROWSET y OPENQUERY para especificar que un objeto remoto depende de las capacidades del proveedor OLE DB que tiene acceso al objeto.Using the OPENROWSET and OPENQUERY functions to specify a remote object depends on the capabilities of the OLE DB provider that accesses the object.

bulk_column_aliasbulk_column_alias

Se aplica a: SQL Server 2008SQL Server 2008 a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server and SQL DatabaseSQL Database.

Es un alias opcional para sustituir el nombre de una columna en el conjunto de resultados.Is an optional alias to replace a column name in the result set. Los alias de columna se permiten solo en las instrucciones SELECT que utilizan la función OPENROWSET con la opción BULK.Column aliases are allowed only in SELECT statements that use the OPENROWSET function with the BULK option. Si usa bulk_column_alias, especifique un alias para cada columna de tabla en el mismo orden que las columnas del archivo.When you use bulk_column_alias, specify an alias for every table column in the same order as the columns in the file.

Nota

Este alias invalida al atributo NAME de los elementos COLUMN de un archivo de formato XML si está presente.This alias overrides the NAME attribute in the COLUMN elements of an XML format file, if present.

user_defined_functionuser_defined_function
Especifica una función con valores de tabla.Specifies a table-valued function.

OPENXML <openxml_clause>OPENXML <openxml_clause>

Se aplica a: SQL Server 2008SQL Server 2008 a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server and SQL DatabaseSQL Database.

Proporciona una vista de un conjunto de filas en un documento XML.Provides a rowset view over an XML document. Para obtener más información, vea OPENXML (Transact-SQL).For more information, see OPENXML (Transact-SQL).

derived_tablederived_table
Es una subconsulta que recupera filas de la base de datos.Is a subquery that retrieves rows from the database. derived_table se usa como entrada para la consulta externa.derived_table is used as input to the outer query.

derived _table puede usar la característica de constructor con valores de tabla de Transact-SQLTransact-SQL para especificar varias filas.derived _table can use the Transact-SQLTransact-SQL table value constructor feature to specify multiple rows. Por ejemplo, SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);.For example, SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);. Para más información, vea Constructor con valores de tabla (Transact-SQL).For more information, see Table Value Constructor (Transact-SQL).

column_aliascolumn_alias
Es un alias opcional para sustituir el nombre de una columna en el conjunto de resultados de la tabla derivada.Is an optional alias to replace a column name in the result set of the derived table. Incluya un alias de columna para cada columna de la lista de selección y delimite la lista de alias de columna con paréntesis.Include one column alias for each column in the select list, and enclose the complete list of column aliases in parentheses.

table_or_view_name FOR SYSTEM_TIME <system_time>table_or_view_name FOR SYSTEM_TIME <system_time>

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

Especifica que se devuelva una versión determinada de los datos de la tabla temporal especificada y su tabla de historial de versiones del sistema vinculada.Specifies that a specific version of data is returned from the specified temporal table and its linked system-versioned history table

Cláusula TablesampleTablesample clause

Se aplica a: SQL Server, SQL DatabaseApplies to: SQL Server, SQL Database

Especifica que se devuelva un ejemplo de los datos de la tabla.Specifies that a sample of data from the table is returned. El ejemplo puede ser aproximado.The sample may be approximate. Esta cláusula se puede usar en cualquier tabla principal o combinada de una instrucción SELECT o UPDATE.This clause can be used on any primary or joined table in a SELECT or UPDATE statement. TABLESAMPLE no se puede especificar con vistas.TABLESAMPLE cannot be specified with views.

Nota

Cuando se utiliza TABLESAMPLE en bases de datos que se actualizan a SQL ServerSQL Server, el nivel de compatibilidad de la base de datos se establece en 110 o superior y no se permite PIVOT en una consulta de expresión de tabla común (CTE) recursiva.When you use TABLESAMPLE against databases that are upgraded to SQL ServerSQL Server, the compatibility level of the database is set to 110 or higher, PIVOT is not allowed in a recursive common table expression (CTE) query. Para obtener más información, vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

SYSTEMSYSTEM
Se trata de un método de muestreo dependiente de la implementación especificado por los estándares ISO.Is an implementation-dependent sampling method specified by ISO standards. En SQL ServerSQL Server, es el único método de muestreo disponible y se aplica de forma predeterminada.In SQL ServerSQL Server, this is the only sampling method available and is applied by default. SYSTEM aplica un método de muestreo basado en páginas en el que se elige un conjunto de páginas aleatorio de la tabla para el ejemplo y todas las filas de dichas páginas se devuelven como el subconjunto de ejemplo.SYSTEM applies a page-based sampling method in which a random set of pages from the table is chosen for the sample, and all the rows on those pages are returned as the sample subset.

sample_numbersample_number
Es una expresión numérica constante exacta o aproximada que representa el porcentaje o el número de filas.Is an exact or approximate constant numeric expression that represents the percent or number of rows. Si se especifica con PERCENT, sample_number se convierte de forma implícita en un valor float; en caso contrario, se convierte en bigint.When specified with PERCENT, sample_number is implicitly converted to a float value; otherwise, it is converted to bigint. PERCENT es el valor predeterminado.PERCENT is the default.

PERCENTPERCENT
Especifica que se debe recuperar de la tabla el porcentaje sample_number de filas.Specifies that a sample_number percent of the rows of the table should be retrieved from the table. Si se especifica PERCENT, SQL ServerSQL Server devuelve un valor aproximado del porcentaje especificado.When PERCENT is specified, SQL ServerSQL Server returns an approximate of the percent specified. Si se especifica PERCENT, la expresión sample_number debe evaluarse como un valor comprendido entre 0 y 100.When PERCENT is specified the sample_number expression must evaluate to a value from 0 to 100.

ROWSROWS
Especifica que se recupere aproximadamente el valor sample_number de filas.Specifies that approximately sample_number of rows will be retrieved. Si se especifica ROWS, SQL ServerSQL Server devuelve una aproximación del número de filas especificado.When ROWS is specified, SQL ServerSQL Server returns an approximation of the number of rows specified. Si se especifica ROWS, la expresión sample_number debe evaluarse como un valor entero mayor que cero.When ROWS is specified, the sample_number expression must evaluate to an integer value greater than zero.

REPEATABLEREPEATABLE
Indica que el ejemplo seleccionado se puede devolver de nuevo.Indicates that the selected sample can be returned again. Si se especifica con el mismo valor de repeat_seed, SQL ServerSQL Server devuelve el mismo subconjunto de filas, siempre que no se hayan realizado cambios en las filas de la tabla.When specified with the same repeat_seed value, SQL ServerSQL Server will return the same subset of rows as long as no changes have been made to any rows in the table. Si se especifica con otro valor de repeat_seed, es probable que SQL ServerSQL Server devuelva una muestra distinta de filas de la tabla.When specified with a different repeat_seed value, SQL ServerSQL Server will likely return some different sample of the rows in the table. Se consideran cambios en la tabla las siguientes acciones: insertar, actualizar, eliminar, volver a generar o desfragmentar índices, y restaurar o adjuntar bases de datos.The following actions to the table are considered changes: insert, update, delete, index rebuild or defragmentation, and database restore or attach.

repeat_seedrepeat_seed
Es una expresión de tipo entero constante utilizada por SQL ServerSQL Server para generar un número aleatorio.Is a constant integer expression used by SQL ServerSQL Server to generate a random number. repeat_seed es bigint.repeat_seed is bigint. Si no se especifica repeat_seed, SQL ServerSQL Server asigna un valor de forma aleatoria.If repeat_seed is not specified, SQL ServerSQL Server assigns a value at random. Para un valor repeat_seed específico, el resultado del muestreo es siempre el mismo si no se ha aplicado ningún cambio a la tabla.For a specific repeat_seed value, the sampling result is always the same if no changes have been applied to the table. La expresión repeat_seed debe evaluarse como un entero mayor que cero.The repeat_seed expression must evaluate to an integer greater than zero.

Cláusula TablesampleTablesample clause

Se aplica a: SQL Data WarehouseApplies to: SQL Data Warehouse

Especifica que se devuelva un ejemplo de los datos de la tabla.Specifies that a sample of data from the table is returned. El ejemplo puede ser aproximado.The sample may be approximate. Esta cláusula se puede usar en cualquier tabla principal o combinada de una instrucción SELECT o UPDATE.This clause can be used on any primary or joined table in a SELECT or UPDATE statement. TABLESAMPLE no se puede especificar con vistas.TABLESAMPLE cannot be specified with views.

PERCENTPERCENT
Especifica que se debe recuperar de la tabla el porcentaje sample_number de filas.Specifies that a sample_number percent of the rows of the table should be retrieved from the table. Si se especifica PERCENT, SQL Data Warehouse devuelve un valor aproximado del porcentaje especificado.When PERCENT is specified, SQL Data Warehouse returns an approximate of the percent specified. Si se especifica PERCENT, la expresión sample_number debe evaluarse como un valor comprendido entre 0 y 100.When PERCENT is specified, the sample_number expression must evaluate to a value from 0 to 100.

Tabla combinadaJoined table

Las tablas combinadas son un conjunto de resultados producto de dos o más tablas.A joined table is a result set that is the product of two or more tables. Para varias combinaciones, utilice paréntesis para cambiar el orden natural de las combinaciones.For multiple joins, use parentheses to change the natural order of the joins.

Tipo de combinaciónJoin type

Especifica el tipo de operación de combinación.Specifies the type of join operation.

INNERINNER
Especifica que se devuelvan todos los pares de filas coincidentes.Specifies all matching pairs of rows are returned. Rechaza las filas no coincidentes de las dos tablas.Discards unmatched rows from both tables. Si no se especifica ningún tipo de combinación, éste es el valor predeterminado.When no join type is specified, this is the default.

FULL [ OUTER ]FULL [ OUTER ]
Especifica que una fila de la tabla de la derecha o de la izquierda, que no cumpla la condición de combinación, se incluya en el conjunto de resultados y que las columnas que correspondan a la otra tabla se establezcan en NULL.Specifies that a row from either the left or right table that does not meet the join condition is included in the result set, and output columns that correspond to the other table are set to NULL. De esta forma se agregan más filas a las que se suelen devolver con INNER JOIN.This is in addition to all rows typically returned by the INNER JOIN.

LEFT [ OUTER ]LEFT [ OUTER ]
Especifica que todas las filas de la tabla izquierda que no cumplan la condición de combinación se incluyan en el conjunto de resultados, con las columnas de resultados de la otra tabla establecidas en NULL, además de todas las filas devueltas por la combinación interna.Specifies that all rows from the left table not meeting the join condition are included in the result set, and output columns from the other table are set to NULL in addition to all rows returned by the inner join.

RIGHT [OUTER]RIGHT [OUTER]
Especifica que todas las filas de la tabla derecha que no cumplan la condición de combinación se incluyan en el conjunto de resultados, con las columnas de resultados de la otra tabla establecidas en NULL, además de todas las filas devueltas por la combinación interna.Specifies all rows from the right table not meeting the join condition are included in the result set, and output columns that correspond to the other table are set to NULL, in addition to all rows returned by the inner join.

Sugerencia de combinaciónJoin hint

En SQL ServerSQL Server y SQL DatabaseSQL Database, especifica que el optimizador de consultas de SQL ServerSQL Server debe usar una sugerencia de combinación o un algoritmo de ejecución por cada combinación especificada en la cláusula FROM de la consulta.For SQL ServerSQL Server and SQL DatabaseSQL Database, specifies that the SQL ServerSQL Server query optimizer use one join hint, or execution algorithm, per join specified in the query FROM clause. Para obtener más información, vea Sugerencias de combinación (Transact-SQL).For more information, see Join Hints (Transact-SQL).

En Almacenamiento de datos SQLSQL Data Warehouse y Almacenamiento de datos paralelosParallel Data Warehouse, estas sugerencias de combinación se aplican a combinaciones INNER en dos columnas no compatibles de distribución.For Almacenamiento de datos SQLSQL Data Warehouse and Almacenamiento de datos paralelosParallel Data Warehouse, these join hints apply to INNER joins on two distribution incompatible columns. Para mejorar el rendimiento de las consultas, puede restringir la cantidad de movimiento de datos que se produce durante el procesamiento de consultas.They can improve query performance by restricting the amount of data movement that occurs during query processing. Las sugerencias de combinación permitidas para Almacenamiento de datos SQLSQL Data Warehouse y Almacenamiento de datos paralelosParallel Data Warehouse son:The allowable join hints for Almacenamiento de datos SQLSQL Data Warehouse and Almacenamiento de datos paralelosParallel Data Warehouse are as follows:

REDUCEREDUCE
Reduce el número de filas que se van a mover de la tabla del lado derecho de la combinación con el fin de que dos tablas no compatibles de distribución sean compatibles.Reduces the number of rows to be moved for the table on the right side of the join in order to make two distribution incompatible tables compatible. La sugerencia REDUCE también se denomina sugerencia de semicombinación.The REDUCE hint is also called a semi-join hint.

REPLICATEREPLICATE
Hace que los valores de la columna de combinación de la tabla del lado izquierdo de la combinación se repliquen en todos los nodos.Causes the values in the joining column from the table on the left side of the join to be replicated to all nodes. La tabla de la derecha se combina con la versión replicada de esas columnas.The table on the right is joined to the replicated version of those columns.

REDISTRIBUTEREDISTRIBUTE
Fuerza a la distribución de dos orígenes de datos en columnas especificadas en la cláusula JOIN.Forces two data sources to be distributed on columns specified in the JOIN clause. En el caso de una tabla distribuida, Almacenamiento de datos paralelosParallel Data Warehouse realiza un movimiento de orden aleatorio.For a distributed table, Almacenamiento de datos paralelosParallel Data Warehouse will perform a shuffle move. En el caso de una tabla replicada, Almacenamiento de datos paralelosParallel Data Warehouse realiza un movimiento de recorte.For a replicated table, Almacenamiento de datos paralelosParallel Data Warehouse will perform a trim move. Para entender estos tipos de movimiento, vea la sección "DMS Query Plan Operations" (Operaciones del plan de consulta DMS) del tema "Understanding Query Plans" (Descripción de los planes de consulta) de la Documentación del producto de Almacenamiento de datos paralelosParallel Data Warehouse product documentation.To understand these move types, see the "DMS Query Plan Operations" section in the "Understanding Query Plans" topic in the Documentación del producto de Almacenamiento de datos paralelosParallel Data Warehouse product documentation. Esta sugerencia puede mejorar el rendimiento si el plan de consulta usa un movimiento de difusión para resolver una combinación no compatible de distribución.This hint can improve performance when the query plan is using a broadcast move to resolve a distribution incompatible join.

JOINJOIN
Indica que se va a ejecutar la operación de combinación especificada entre los orígenes de tabla o vistas indicados.Indicates that the specified join operation should occur between the specified table sources or views.

ON <search_condition>ON <search_condition>
Especifica la condición en la que se basa la combinación.Specifies the condition on which the join is based. La condición puede especificar cualquier predicado, aunque se suelen utilizar columnas y operadores de comparación; por ejemplo:The condition can specify any predicate, although columns and comparison operators are frequently used, for example:

SELECT p.ProductID, v.BusinessEntityID  
FROM Production.Product AS p   
JOIN Purchasing.ProductVendor AS v  
ON (p.ProductID = v.ProductID);  
  

Cuando la condición especifique columnas, no será necesario que tengan el mismo nombre o el mismo tipo de datos; sin embargo, si los tipos de datos no son idénticos, deben ser compatibles o tratarse de tipos que SQL ServerSQL Server pueda convertir implícitamente.When the condition specifies columns, the columns do not have to have the same name or same data type; however, if the data types are not the same, they must be either compatible or types that SQL ServerSQL Server can implicitly convert. Si los tipos de datos no se pueden convertir implícitamente, la condición debe convertir de forma explícita el tipo de datos mediante la función CONVERT.If the data types cannot be implicitly converted, the condition must explicitly convert the data type by using the CONVERT function.

Puede haber predicados relacionados solamente con una de las tablas combinadas de la cláusula ON.There can be predicates that involve only one of the joined tables in the ON clause. Estos predicados también pueden estar en la cláusula WHERE de la consulta.Such predicates also can be in the WHERE clause in the query. Aunque la posición de estos predicados no produce ninguna diferencia en el caso de combinaciones INNER, podría generar un resultado diferente si estuvieran implicadas las combinaciones OUTER.Although the placement of such predicates does not make a difference for INNER joins, they might cause a different result when OUTER joins are involved. La razón es que los predicados de la cláusula ON se aplican a la tabla antes de la combinación, mientras la cláusula WHERE se aplica de forma semántica al resultado de la combinación.This is because the predicates in the ON clause are applied to the table before the join, whereas the WHERE clause is semantically applied to the result of the join.

Para obtener más información sobre los predicados y las condiciones de búsqueda, vea Condiciones de búsqueda (Transact-SQL).For more information about search conditions and predicates, see Search Condition (Transact-SQL).

CROSS JOINCROSS JOIN
Especifica el producto resultante de dos tablas.Specifies the cross-product of two tables. Devuelve las mismas filas que se devolverían si no se especificara la cláusula WHERE en una combinación de estilo antiguo distinta del estilo de SQL-92.Returns the same rows as if no WHERE clause was specified in an old-style, non-SQL-92-style join.

left_table_source { CROSS | OUTER } APPLY right_table_sourceleft_table_source { CROSS | OUTER } APPLY right_table_source
Especifica que el argumento right_table_source del operador APPLY se evalúe con respecto a cada fila de left_table_source.Specifies that the right_table_source of the APPLY operator is evaluated against every row of the left_table_source. Esta funcionalidad es útil si right_table_source contiene una función con valores de tabla que toma los valores de columna de left_table_source como uno de sus argumentos.This functionality is useful when the right_table_source contains a table-valued function that takes column values from the left_table_source as one of its arguments.

Se debe especificar OUTER o CROSS con APPLY.Either CROSS or OUTER must be specified with APPLY. Si se especifica CROSS, no se genera ninguna fila cuando right_table_source se evalúa con respecto a una fila especificada de left_table_source y devuelve un conjunto de resultados vacío.When CROSS is specified, no rows are produced when the right_table_source is evaluated against a specified row of the left_table_source and returns an empty result set.

Si se especifica OUTER, se genera una fila para cada fila de left_table_source, incluso si right_table_source se evalúa con respecto a dicha fila y devuelve un conjunto de resultados vacío.When OUTER is specified, one row is produced for each row of the left_table_source even when the right_table_source evaluates against that row and returns an empty result set.

Para obtener más información, vea la sección Comentarios.For more information, see the Remarks section.

left_table_sourceleft_table_source
Es un origen de tabla según se ha definido en el argumento anterior.Is a table source as defined in the previous argument. Para obtener más información, vea la sección Comentarios.For more information, see the Remarks section.

right_table_sourceright_table_source
Es un origen de tabla según se ha definido en el argumento anterior.Is a table source as defined in the previous argument. Para obtener más información, vea la sección Comentarios.For more information, see the Remarks section.

Cláusula PIVOTPIVOT clause

table_source PIVOT <pivot_clause>table_source PIVOT <pivot_clause>
Especifica que el argumento table_source se dinamice según pivot_column.Specifies that the table_source is pivoted based on the pivot_column. table_source es una tabla o expresión de tabla.table_source is a table or table expression. El resultado es una tabla que contiene todas las columnas de table_source, excepto pivot_column y value_column.The output is a table that contains all columns of the table_source except the pivot_column and value_column. Las columnas de table_source, excepto pivot_column y value_column, se denominan columnas de agrupamiento del operador dinámico.The columns of the table_source, except the pivot_column and value_column, are called the grouping columns of the pivot operator. Para obtener más información sobre PIVOT y UNPIVOT, vea Usar PIVOT y UNPIVOT.For more information about PIVOT and UNPIVOT, see Using PIVOT and UNPIVOT.

PIVOT realiza una operación de agrupamiento en la tabla de entrada con respecto a las columnas de agrupamiento y devuelve una fila para cada grupo.PIVOT performs a grouping operation on the input table with regard to the grouping columns and returns one row for each group. Además, la salida contiene una columna para cada valor especificado en column_list que aparece en el parámetro pivot_column de input_table.Additionally, the output contains one column for each value specified in the column_list that appears in the pivot_column of the input_table.

Para obtener más información, vea la sección Comentarios a continuación.For more information, see the Remarks section that follows.

aggregate_functionaggregate_function
Es una función de agregado del sistema o definida por el usuario que acepta una o más entradas.Is a system or user-defined aggregate function that accepts one or more inputs. La función de agregado no puede variar con respecto a los valores NULL.The aggregate function should be invariant to null values. Una función de agregado invariable con respecto a los valores NULL no tiene en cuenta los valores NULL del grupo mientras evalúa el valor del agregado.An aggregate function invariant to null values does not consider null values in the group while it is evaluating the aggregate value.

No se permite la función de agregado del sistema COUNT(*).The COUNT(*) system aggregate function is not allowed.

value_columnvalue_column
Es la columna de valores del operador PIVOT.Is the value column of the PIVOT operator. Si se usa con UNPIVOT, value_column no puede ser el nombre de una columna existente en el parámetro table_source de entrada.When used with UNPIVOT, value_column cannot be the name of an existing column in the input table_source.

FOR pivot_columnFOR pivot_column
Es la columna dinámica del operador PIVOT.Is the pivot column of the PIVOT operator. pivot_column debe ser de un tipo que se pueda convertir implícita o explícitamente en nvarchar() .pivot_column must be of a type implicitly or explicitly convertible to nvarchar(). Esta columna no puede ser image ni rowversion.This column cannot be image or rowversion.

Si se usa UNPIVOT, pivot_column es el nombre de la columna de salida restringida a partir de table_source.When UNPIVOT is used, pivot_column is the name of the output column that becomes narrowed from the table_source. No puede haber ninguna columna en table_source con ese nombre.There cannot be an existing column in table_source with that name.

IN (column_list )IN (column_list )
En la cláusula PIVOT, se incluyen los valores de pivot_column que se van a convertir en los nombres de columnas de la tabla de salida.In the PIVOT clause, lists the values in the pivot_column that will become the column names of the output table. La lista no puede especificar ningún nombre de columna que ya exista en el parámetro table_source de entrada que se está dinamizando.The list cannot specify any column names that already exist in the input table_source that is being pivoted.

En la cláusula UNPIVOT, se incluyen las columnas de table_source que se van a restringir en una sola pivot_column.In the UNPIVOT clause, lists the columns in table_source that will be narrowed into a single pivot_column.

table_aliastable_alias
Es el nombre de alias de la tabla de salida.Is the alias name of the output table. Se debe especificar pivot_table_alias.pivot_table_alias must be specified.

UNPIVOT <unpivot_clause>UNPIVOT <unpivot_clause>
Especifica que la tabla de entrada se restrinja a partir de varias columnas de column_list en una sola columna denominada pivot_column.Specifies that the input table is narrowed from multiple columns in column_list into a single column called pivot_column. Para obtener más información sobre PIVOT y UNPIVOT, vea Usar PIVOT y UNPIVOT.For more information about PIVOT and UNPIVOT, see Using PIVOT and UNPIVOT.

AS OF <date_time>AS OF <date_time>

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

Devuelve una tabla con un único registro por cada fila que contenga los valores que fueran reales (actuales) en el momento determinado especificado en el pasado.Returns a table with single record for each row containing the values that were actual (current) at the specified point in time in the past. Internamente, se realiza una unión entre la tabla temporal y su tabla de historial y los resultados se filtran para devolver los valores de la fila que era válida en el momento determinado especificado por el parámetro <date_time> .Internally, a union is performed between the temporal table and its history table and the results are filtered to return the values in the row that was valid at the point in time specified by the <date_time> parameter. El valor de una fila se considera válido si el valor de system_start_time_column_name es menor o igual que el valor del parámetro <date_time> y el valor de system_end_time_column_name es mayor que el valor del parámetro <date_time> .The value for a row is deemed valid if the system_start_time_column_name value is less than or equal to the <date_time> parameter value and the system_end_time_column_name value is greater than the <date_time> parameter value.

FROM <start_date_time> TO <end_date_time>FROM <start_date_time> TO <end_date_time>

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

Devuelve una tabla con los valores de todas las versiones de registro que estaban activas dentro del rango de tiempo especificado, independientemente de si empezaron a ser activas antes del valor del parámetro <start_date_time> del argumento FROM o si dejaron de serlo después del valor del parámetro <end_date_time> del argumento TO.Returns a table with the values for all record versions that were active within the specified time range, regardless of whether they started being active before the <start_date_time> parameter value for the FROM argument or ceased being active after the <end_date_time> parameter value for the TO argument. Internamente, se realiza una unión entre la tabla temporal y su tabla de historial y los resultados se filtran para devolver los valores de todas las versiones de fila que estaban activas en cualquier momento dentro del intervalo de tiempo especificado.Internally, a union is performed between the temporal table and its history table and the results are filtered to return the values for all row versions that were active at any time during the time range specified. Se incluyen las filas que se activaron justamente en el límite inferior definido por el punto de conexión FROM y no se incluyen aquellas que se activaron exactamente en el límite superior definido por el punto de conexión TO.Rows that became active exactly on the lower boundary defined by the FROM endpoint are included and rows that became active exactly on the upper boundary defined by the TO endpoint are not included.

BETWEEN <start_date_time> AND <end_date_time>BETWEEN <start_date_time> AND <end_date_time>

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

Igual que la descripción anterior de FROM <start_date_time> TO <end_date_time> , salvo que incluye las filas que se activaron en el límite superior definido por el punto de conexión <end_date_time>.Same as above in the FROM <start_date_time> TO <end_date_time> description, except it includes rows that became active on the upper boundary defined by the <end_date_time> endpoint.

CONTAINED IN (<start_date_time> , <end_date_time>)CONTAINED IN (<start_date_time> , <end_date_time>)

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

Devuelve una tabla con los valores de todas las versiones de registro que se abrieron y cerraron dentro del intervalo de tiempo especificado definido por los dos valores de fecha y hora en el argumento CONTAINED IN.Returns a table with the values for all record versions that were opened and closed within the specified time range defined by the two datetime values for the CONTAINED IN argument. Se incluyen las filas que se activaron justamente en el límite inferior o que dejaron de estarlo exactamente en el límite superior.Rows that became active exactly on the lower boundary or ceased being active exactly on the upper boundary are included.

ALLALL
Devuelve una tabla con los valores de todas las filas de la tabla actual y la tabla de historial.Returns a table with the values from all rows from both the current table and the history table.

NotasRemarks

La cláusula FROM admite la sintaxis SQL-92-SQL para las tablas combinadas y las tablas derivadas.The FROM clause supports the SQL-92-SQL syntax for joined tables and derived tables. La sintaxis SQL-92 proporciona los operadores de combinación INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER y CROSS.SQL-92 syntax provides the INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, and CROSS join operators.

En las vistas, tablas derivadas y subconsultas se admiten las operaciones UNION y JOIN dentro de una cláusula FROM.UNION and JOIN within a FROM clause are supported within views and in derived tables and subqueries.

Una autocombinación es una tabla que se combina consigo misma.A self-join is a table that is joined to itself. Las inserciones o actualizaciones basadas en una autocombinación siguen el orden de la cláusula FROM.Insert or update operations that are based on a self-join follow the order in the FROM clause.

Puesto que SQL ServerSQL Server considera las estadísticas de cardinalidad y distribución de servidores vinculados que proporcionan estadísticas de distribución de columnas, no es necesaria la sugerencia de combinación REMOTE para exigir la evaluación de una combinación de forma remota.Because SQL ServerSQL Server considers distribution and cardinality statistics from linked servers that provide column distribution statistics, the REMOTE join hint is not required to force evaluating a join remotely. El procesador de consultas de SQL ServerSQL Server considera las estadísticas remotas y determina si es apropiada una estrategia de combinación remota.The SQL ServerSQL Server query processor considers remote statistics and determines whether a remote-join strategy is appropriate. La sugerencia de combinación REMOTE es útil para los proveedores que no proporcionan estadísticas de distribución de columnas.REMOTE join hint is useful for providers that do not provide column distribution statistics.

Usar APPLYUsing APPLY

Los operandos izquierdo y derecho del operador APPLY son expresiones de tabla.Both the left and right operands of the APPLY operator are table expressions. La diferencia principal entre estos operandos es que right_table_source puede usar una función con valores de tabla que tome una columna de left_table_source como uno de los argumentos de la función.The main difference between these operands is that the right_table_source can use a table-valued function that takes a column from the left_table_source as one of the arguments of the function. left_table_source puede incluir funciones con valores de tabla, pero no puede contener argumentos que sean columnas de right_table_source.The left_table_source can include table-valued functions, but it cannot contain arguments that are columns from the right_table_source.

El operador APPLY funciona del siguiente modo para generar el origen de tabla para la cláusula FROM:The APPLY operator works in the following way to produce the table source for the FROM clause:

  1. Se evalúa como right_table_source con respecto a cada fila de left_table_source para generar conjuntos de filas.Evaluates right_table_source against each row of the left_table_source to produce rowsets.

    Los valores de right_table_source dependen de left_table_source.The values in the right_table_source depend on left_table_source. right_table_source se puede representar aproximadamente de esta manera: TVF(left_table_source.row), donde TVF es una función con valores de tabla.right_table_source can be represented approximately this way: TVF(left_table_source.row), where TVF is a table-valued function.

  2. Combina los conjuntos de resultados generados para cada fila en la evaluación de right_table_source con left_table_source mediante una operación UNION ALL.Combines the result sets that are produced for each row in the evaluation of right_table_source with the left_table_source by performing a UNION ALL operation.

    La lista de columnas que genera el resultado del operador APPLY es el conjunto de columnas de left_table_source combinado con la lista de columnas de right_table_source.The list of columns produced by the result of the APPLY operator is the set of columns from the left_table_source that is combined with the list of columns from the right_table_source.

Usar PIVOT y UNPIVOTUsing PIVOT and UNPIVOT

pivot_column y value_column son columnas de agrupamiento usadas por el operador PIVOT.The pivot_column and value_column are grouping columns that are used by the PIVOT operator. Para obtener el conjunto de resultados de salida, PIVOT aplica el siguiente proceso:PIVOT follows the following process to obtain the output result set:

  1. Realiza una operación GROUP BY en input_table con respecto a las columnas de agrupamiento y genera una fila de salida para cada grupo.Performs a GROUP BY on its input_table against the grouping columns and produces one output row for each group.

    Las columnas de agrupamiento de la fila de salida obtienen los valores de columna correspondientes para dicho grupo en input_table.The grouping columns in the output row obtain the corresponding column values for that group in the input_table.

  2. Genera valores para las columnas de la lista de columnas para cada fila de resultados mediante las siguientes operaciones:Generates values for the columns in the column list for each output row by performing the following:

    1. Agrupación adicional de las filas generadas en GROUP BY en el paso anterior con respecto a pivot_column.Grouping additionally the rows generated in the GROUP BY in the previous step against the pivot_column.

      Para cada columna de salida de column_list, se selecciona un subgrupo que cumple la condición:For each output column in the column_list, selecting a subgroup that satisfies the condition:

      pivot_column = CONVERT(<data type of pivot_column>, 'output_column')

    2. aggregate_function se evalúa con respecto a value_column en este subgrupo y su resultado se devuelve como el valor de output_column correspondiente.aggregate_function is evaluated against the value_column on this subgroup and its result is returned as the value of the corresponding output_column. Si el subgrupo está vacío, SQL ServerSQL Server genera un valor NULL para output_column.If the subgroup is empty, SQL ServerSQL Server generates a null value for that output_column. Si la función de agregado es COUNT y el subgrupo está vacío, se devuelve cero (0).If the aggregate function is COUNT and the subgroup is empty, zero (0) is returned.

Nota

Los identificadores de columna de la cláusula UNPIVOT siguen la intercalación del catálogo.The column identifiers in the UNPIVOT clause follow the catalog collation. Para SQL DatabaseSQL Database, la intercalación es siempre SQL_Latin1_General_CP1_CI_AS.For SQL DatabaseSQL Database, the collation is always SQL_Latin1_General_CP1_CI_AS. Para las bases de datos parcialmente independientes de SQL ServerSQL Server, la intercalación es siempre Latin1_General_100_CI_AS_KS_WS_SC.For SQL ServerSQL Server partially contained databases, the collation is always Latin1_General_100_CI_AS_KS_WS_SC. Si la columna se combina con otras columnas, se necesita una cláusula COLLATE (COLLATE DATABASE_DEFAULT) para evitar conflictos.If the column is combined with other columns, then a collate clause (COLLATE DATABASE_DEFAULT) is required to avoid conflicts.

Para obtener más información sobre PIVOT y UNPIVOT, incluidos ejemplos, vea Usar PIVOT y UNPIVOT.For more information about PIVOT and UNPIVOT including examples, see Using PIVOT and UNPIVOT.

PermisosPermissions

Requiere los permisos para la instrucción DELETE, SELECT o UPDATE.Requires the permissions for the DELETE, SELECT, or UPDATE statement.

EjemplosExamples

A.A. Usar una cláusula FROM sencillaUsing a simple FROM clause

En el siguiente ejemplo se recuperan las columnas TerritoryID y Name de la tabla SalesTerritory de la base de datos de ejemplo AdventureWorks2012AdventureWorks2012.The following example retrieves the TerritoryID and Name columns from the SalesTerritory table in the AdventureWorks2012AdventureWorks2012 sample database.

SELECT TerritoryID, Name  
FROM Sales.SalesTerritory  
ORDER BY TerritoryID ;  

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

TerritoryID Name                            
----------- ------------------------------  
1           Northwest                       
2           Northeast                       
3           Central                         
4           Southwest                       
5           Southeast                       
6           Canada                          
7           France                          
8           Germany                         
9           Australia                       
10          United Kingdom                  
(10 row(s) affected)  

B.B. Usar las sugerencias del optimizador TABLOCK y HOLDLOCKUsing the TABLOCK and HOLDLOCK optimizer hints

En la siguiente transacción parcial se muestra cómo colocar un bloqueo explícito de tabla compartida en Employee y cómo leer el índice.The following partial transaction shows how to place an explicit shared table lock on Employee and how to read the index. El bloqueo se mantiene durante toda la transacción.The lock is held throughout the whole transaction.

BEGIN TRAN  
SELECT COUNT(*)   
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK) ;  

C.C. Usar la sintaxis CROSS JOIN de SQL-92Using the SQL-92 CROSS JOIN syntax

Este ejemplo devuelve el producto resultante de las tablas Employee y Department de la base de datos AdventureWorks2012AdventureWorks2012.The following example returns the cross product of the two tables Employee and Department in the AdventureWorks2012AdventureWorks2012 database. Se devuelve la lista de todas las combinaciones posibles de las filas de BusinessEntityID y todas las filas con el nombre Department.A list of all possible combinations of BusinessEntityID rows and all Department name rows are returned.

SELECT e.BusinessEntityID, d.Name AS Department  
FROM HumanResources.Employee AS e  
CROSS JOIN HumanResources.Department AS d  
ORDER BY e.BusinessEntityID, d.Name ;  

D.D. Usar la sintaxis FULL OUTER JOIN de SQL-92Using the SQL-92 FULL OUTER JOIN syntax

En el siguiente ejemplo se devuelve el nombre del producto y los pedidos de venta correspondientes de la tabla SalesOrderDetail de la base de datos AdventureWorks2012AdventureWorks2012.The following example returns the product name and any corresponding sales orders in the SalesOrderDetail table in the AdventureWorks2012AdventureWorks2012 database. Además, se devuelven todos los pedidos de venta que no incluyen ningún producto en la tabla Product y todos los productos con un pedido de venta distinto del especificado en la tabla Product.It also returns any sales orders that have no product listed in the Product table, and any products with a sales order other than the one listed in the Product table.

-- The OUTER keyword following the FULL keyword is optional.  
SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
FULL OUTER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

E.E. Usar la sintaxis LEFT FULL OUTER de SQL-92Using the SQL-92 LEFT OUTER JOIN syntax

Este ejemplo combina dos tablas en ProductID y mantiene las filas no coincidentes de la tabla izquierda.The following example joins two tables on ProductID and preserves the unmatched rows from the left table. La tabla Product coincide con la tabla SalesOrderDetail en las columnas ProductID de cada tabla.The Product table is matched with the SalesOrderDetail table on the ProductID columns in each table. Todos los productos, ordenados y no ordenados, aparecen en el conjunto de resultados.All products, ordered and not ordered, appear in the result set.

SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

F.F. Usar la sintaxis INNER JOIN de SQL-92Using the SQL-92 INNER JOIN syntax

En el siguiente ejemplo se devuelven todos los nombres de productos e identificadores de pedidos de venta.The following example returns all product names and sales order IDs.

-- By default, SQL Server performs an INNER JOIN if only the JOIN   
-- keyword is specified.  
SELECT p.Name, sod.SalesOrderID  
FROM Production.Product AS p  
INNER JOIN Sales.SalesOrderDetail AS sod  
ON p.ProductID = sod.ProductID  
ORDER BY p.Name ;  

G.G. Usar la sintaxis RIGHT OUTER JOIN de SQL-92Using the SQL-92 RIGHT OUTER JOIN syntax

Este ejemplo combina dos tablas en TerritoryID y mantiene las filas no coincidentes de la tabla derecha.The following example joins two tables on TerritoryID and preserves the unmatched rows from the right table. La tabla SalesTerritory coincide con la tabla SalesPerson en la columna TerritoryID de cada tabla.The SalesTerritory table is matched with the SalesPerson table on the TerritoryID column in each table. Todos los vendedores aparecen en el conjunto de resultados con independencia de que tengan un territorio asignado.All salespersons appear in the result set, whether or not they are assigned a territory.

SELECT st.Name AS Territory, sp.BusinessEntityID  
FROM Sales.SalesTerritory AS st   
RIGHT OUTER JOIN Sales.SalesPerson AS sp  
ON st.TerritoryID = sp.TerritoryID ;  

H.H. Usar las sugerencias de combinación HASH y MERGEUsing HASH and MERGE join hints

En el siguiente ejemplo se realiza una combinación de tres tablas entre las tablas Product, ProductVendor y Vendor para generar una lista de productos y sus proveedores.The following example performs a three-table join among the Product, ProductVendor, and Vendor tables to produce a list of products and their vendors. El optimizador de consultas combina Product y ProductVendor (p y pv) mediante una combinación MERGE.The query optimizer joins Product and ProductVendor (p and pv) by using a MERGE join. A continuación, los resultados de la combinación MERGE de Product y ProductVendor (p y pv) se combinan mediante HASH con la tabla Vendor para generar (p y pv) y v.Next, the results of the Product and ProductVendor MERGE join (p and pv) are HASH joined to the Vendor table to produce (p and pv) and v.

Importante

Después de especificar una sugerencia de combinación, la palabra clave INNER ya no es opcional y se tiene que incluir explícitamente para hacer combinaciones INNER JOIN.After a join hint is specified, the INNER keyword is no longer optional and must be explicitly stated for an INNER JOIN to be performed.

SELECT p.Name AS ProductName, v.Name AS VendorName  
FROM Production.Product AS p   
INNER MERGE JOIN Purchasing.ProductVendor AS pv   
ON p.ProductID = pv.ProductID  
INNER HASH JOIN Purchasing.Vendor AS v  
ON pv.BusinessEntityID = v.BusinessEntityID  
ORDER BY p.Name, v.Name ;  

I.I. Usar una tabla derivadaUsing a derived table

En el siguiente ejemplo se utiliza una tabla derivada y una instrucción SELECT después de la cláusula FROM para devolver los nombres y apellidos de todos los empleados y las ciudades en que residen.The following example uses a derived table, a SELECT statement after the FROM clause, to return the first and last names of all employees and the cities in which they live.

SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City  
FROM Person.Person AS p  
INNER JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID   
INNER JOIN  
   (SELECT bea.BusinessEntityID, a.City   
    FROM Person.Address AS a  
    INNER JOIN Person.BusinessEntityAddress AS bea  
    ON a.AddressID = bea.AddressID) AS d  
ON p.BusinessEntityID = d.BusinessEntityID  
ORDER BY p.LastName, p.FirstName;  

J.J. Usar TABLESAMPLE para leer datos de un ejemplo de filas de una tablaUsing TABLESAMPLE to read data from a sample of rows in a table

En el siguiente ejemplo se utiliza TABLESAMPLE en la cláusula FROM para devolver aproximadamente el 10 por ciento de todas las filas de la tabla Customer.The following example uses TABLESAMPLE in the FROM clause to return approximately 10 percent of all the rows in the Customer table.

SELECT *  
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;  

K.K. Usar APPLYUsing APPLY

En el siguiente ejemplo se da por supuesto que las siguientes tablas y la función con valores de tabla existen en la base de datos:The following example assumes that the following tables and table-valued function exist in the database:

Nombre de objetoObject Name Nombres de columnaColumn Names
DepartamentosDepartments DeptID, DivisionID, DeptName, DeptMgrIDDeptID, DivisionID, DeptName, DeptMgrID
EmpMgrEmpMgr MgrID, EmpIDMgrID, EmpID
EmployeesEmployees EmpID, EmpLastName, EmpFirstName, EmpSalaryEmpID, EmpLastName, EmpFirstName, EmpSalary
GetReports(MgrID)GetReports(MgrID) EmpID, EmpLastName, EmpSalaryEmpID, EmpLastName, EmpSalary

La función con valores de tabla GetReports devuelve la lista de todos los empleados que dependen directa o indirectamente del MgrID especificado.The GetReports table-valued function, returns the list of all employees that report directly or indirectly to the specified MgrID.

En el ejemplo se utiliza APPLY para devolver todos los departamentos y todos los empleados de cada departamento.The example uses APPLY to return all departments and all employees in that department. Si un departamento concreto no tiene ningún empleado, no se devuelve ninguna fila para dicho departamento.If a particular department does not have any employees, there will not be any rows returned for that department.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary  
FROM Departments d    
CROSS APPLY dbo.GetReports(d.DeptMgrID) ;  

Si desea que la consulta genere filas para los departamentos sin empleados, lo que genera valores NULL para las columnas EmpID, EmpLastName y EmpSalary, utilice OUTER APPLY.If you want the query to produce rows for those departments without employees, which will produce null values for the EmpID, EmpLastName and EmpSalary columns, use OUTER APPLY instead.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary  
FROM Departments d   
OUTER APPLY dbo.GetReports(d.DeptMgrID) ;  

L.L. Usar CROSS APPLYUsing CROSS APPLY

En el ejemplo siguiente se recupera una instantánea de todos los planes de consulta que residen en la memoria caché del plan mediante una consulta a la vista de administración dinámica sys.dm_exec_cached_plans para recuperar los identificadores de todos los planes de consulta almacenados en la memoria caché.The following example retrieves a snapshot of all query plans residing in the plan cache, by querying the sys.dm_exec_cached_plans dynamic management view to retrieve the plan handles of all query plans in the cache. A continuación se especifica el operador CROSS APPLY para pasar los identificadores del plan a sys.dm_exec_query_plan.Then the CROSS APPLY operator is specified to pass the plan handles to sys.dm_exec_query_plan. La salida del plan de presentación XML de todos los planes almacenados actualmente en la caché del plan se muestra en la columna query_plan de la tabla devuelta.The XML Showplan output for each plan currently in the plan cache is in the query_plan column of the table that is returned.

USE master;  
GO  
SELECT dbid, object_id, query_plan   
FROM sys.dm_exec_cached_plans AS cp   
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);   
GO  

M.M. Usar FOR SYSTEM_TIMEUsing FOR SYSTEM_TIME

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL ServerSQL Server y SQL DatabaseSQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server and SQL DatabaseSQL Database.

En el ejemplo siguiente se usa el argumento FOR SYSTEM_TIME AS OF date_time_literal_or_variable para devolver filas de tabla que eran reales (actuales) el 1 de enero de 2014.The following example uses the FOR SYSTEM_TIME AS OF date_time_literal_or_variable argument to return table rows that were actual (current) as of January 1, 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME AS OF '2014-01-01'  
WHERE ManagerID = 5;

En el ejemplo siguiente se usa el argumento FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable para devolver todas las filas que estaban activas durante el período comprendido entre el 1 de enero de 2013 y el 1 de enero de 2014, excluyendo el límite superior.The following example uses the FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable argument to return all rows that were active during the period defined as starting with January 1, 2013 and ending with January 1, 2014, exclusive of the upper boundary.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME FROM '2013-01-01' TO '2014-01-01'  
WHERE ManagerID = 5;

En el ejemplo siguiente se usa el argumento FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable para devolver todas las filas que estaban activas durante el período comprendido entre el 1 de enero de 2013 y el 1 de enero de 2014, incluyendo el límite superior.The following example uses the FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable argument to return all rows that were active during the period defined as starting with January 1, 2013 and ending with January 1, 2014, inclusive of the upper boundary.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME BETWEEN '2013-01-01' AND '2014-01-01'  
WHERE ManagerID = 5;

En el ejemplo siguiente se usa el argumento FOR SYSTEM_TIME CONTAINED IN ( date_time_literal_or_variable, date_time_literal_or_variable ) para devolver todas las filas que se abrieron y cerraron durante el período comprendido entre el 1 de enero de 2013 y el 1 de enero de 2014.The following example uses the FOR SYSTEM_TIME CONTAINED IN ( date_time_literal_or_variable, date_time_literal_or_variable ) argument to return all rows that were opened and closed during the period defined as starting with January 1, 2013 and ending with January 1, 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME CONTAINED IN ( '2013-01-01', '2014-01-01' )  
WHERE ManagerID = 5;

En el ejemplo siguiente se usa una variable en lugar de un literal para proporcionar los valores de límite de fecha de la consulta.The following example uses a variable rather than a literal to provide the date boundary values for the query.

DECLARE @AsOfFrom datetime2 = dateadd(month,-12, sysutcdatetime());
DECLARE @AsOfTo datetime2 = dateadd(month,-6, sysutcdatetime());
  
SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME FROM @AsOfFrom TO @AsOfTo  
WHERE ManagerID = 5;

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

N.N. Usar la sintaxis INNER JOINUsing the INNER JOIN syntax

El ejemplo siguiente devuelve las columnas SalesOrderNumber, ProductKey y EnglishProductName de las tablas FactInternetSales y DimProduct donde la clave de combinación, ProductKey, coincide en ambas tablas.The following example returns the SalesOrderNumber, ProductKey, and EnglishProductName columns from the FactInternetSales and DimProduct tables where the join key, ProductKey, matches in both tables. Las columnas SalesOrderNumber y EnglishProductName existen en una de las tablas únicamente, por lo que no es necesario especificar el alias de tabla con estas columnas, como se muestra; estos alias se incluyen por motivos de legibilidad.The SalesOrderNumber and EnglishProductName columns each exist in one of the tables only, so it is not necessary to specify the table alias with these columns, as is shown; these aliases are included for readability. La palabra AS antes de un alias de nombre no es necesaria, pero se recomienda por motivos de legibilidad y para ajustarse al estándar ANSI.The word AS before an alias name is not required but is recommended for readability and to conform to the ANSI standard.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
INNER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

Puesto que la palabra clave INNER no es necesaria para las combinaciones internas, esta misma consulta podría escribirse como:Since the INNER keyword is not required for inner joins, this same query could be written as:

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
ON dp.ProductKey = fis.ProductKey;  

También podría usarse una cláusula WHERE con esta consulta para limitar los resultados.A WHERE clause could also be used with this query to limit results. Este ejemplo limita los resultados a los valores SalesOrderNumber superiores a “SO5000”:This example limits results to SalesOrderNumber values higher than 'SO5000':

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey  
WHERE fis.SalesOrderNumber > 'SO50000'  
ORDER BY fis.SalesOrderNumber;  

O.O. Usar la sintaxis LEFT OUTER JOIN y RIGHT OUTER JOINUsing the LEFT OUTER JOIN and RIGHT OUTER JOIN syntax

En el ejemplo siguiente se combinan las tablas FactInternetSales y DimProduct en las columnas ProductKey.The following example joins the FactInternetSales and DimProduct tables on the ProductKey columns. La sintaxis de combinación externa izquierda mantiene las filas no coincidentes de la tabla izquierda (FactInternetSales).The left outer join syntax preserves the unmatched rows from the left (FactInternetSales) table. Puesto que la tabla FactInternetSales no contiene ningún valor ProductKey que no coincida con la tabla DimProduct, esta consulta devuelve las mismas filas que el primer ejemplo de combinación interna anterior.Since the FactInternetSales table does not contain any ProductKey values that do not match the DimProduct table, this query returns the same rows as the first inner join example above.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
LEFT OUTER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

Esta consulta también se podría escribir sin la palabra clave OUTER.This query could also be written without the OUTER keyword.

En las combinaciones externas derechas, se conservan las filas no coincidentes de la tabla derecha.In right outer joins, the unmatched rows from the right table are preserved. El ejemplo siguiente devuelve las mismas filas que el anterior ejemplo de combinación externa izquierda.The following example returns the same rows as the left outer join example above.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM DimProduct AS dp 
RIGHT OUTER JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

La consulta siguiente usa la tabla DimSalesTerritory como tabla izquierda en una combinación externa izquierda.The following query uses the DimSalesTerritory table as the left table in a left outer join. Recupera los valores SalesOrderNumber de la tabla FactInternetSales.It retrieves the SalesOrderNumber values from the FactInternetSales table. Si no hay ningún orden en un valor SalesTerritoryKey determinado, la consulta devuelve NULL para SalesOrderNumber para esa fila.If there are no orders for a particular SalesTerritoryKey, the query will return a NULL for the SalesOrderNumber for that row. Esta consulta se ordena conforme a la columna SalesOrderNumber, por lo que cualquier valor NULL en esta columna aparece en la parte superior de los resultados.This query is ordered by the SalesOrderNumber column, so that any NULLs in this column will appear at the top of the results.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
LEFT OUTER JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Esta consulta se podría volver a escribir con una combinación externa derecha para recuperar los mismos resultados:This query could be rewritten with a right outer join to retrieve the same results:

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM FactInternetSales AS fis 
RIGHT OUTER JOIN DimSalesTerritory AS dst  
    ON fis.SalesTerritoryKey = dst.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

P.P. Usar la sintaxis FULL OUTER JOINUsing the FULL OUTER JOIN syntax

En el ejemplo siguiente se muestra una combinación externa completa que devuelve todas las filas de ambas tablas combinadas, pero que devuelve NULL para los valores que no coinciden de la otra tabla.The following example demonstrates a full outer join, which returns all rows from both joined tables but returns NULL for values that do not match from the other table.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
FULL OUTER JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Esta consulta también se podría escribir sin la palabra clave OUTER.This query could also be written without the OUTER keyword.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
FULL JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Q.Q. Usar la sintaxis CROSS JOINUsing the CROSS JOIN syntax

Este ejemplo devuelve el producto resultante de las tablas FactInternetSales y DimSalesTerritory.The following example returns the cross-product of the FactInternetSales and DimSalesTerritory tables. Se devuelve la lista de todas las combinaciones posibles de SalesOrderNumber y SalesTerritoryKey.A list of all possible combinations of SalesOrderNumber and SalesTerritoryKey are returned. Observe la ausencia de la cláusula ON en la consulta de combinación cruzada.Notice the absence of the ON clause in the cross join query.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
CROSS JOIN FactInternetSales AS fis  
ORDER BY fis.SalesOrderNumber;  

R.R. Usar una tabla derivadaUsing a derived table

En el ejemplo siguiente, se usa una tabla derivada (una instrucción SELECT después de la cláusula FROM) para devolver las columnas CustomerKey y LastName de todos los clientes de la tabla DimCustomer con valores BirthDate posteriores al 1 de enero de 1970 y el apellido “Smith”.The following example uses a derived table (a SELECT statement after the FROM clause) to return the CustomerKey and LastName columns of all customers in the DimCustomer table with BirthDate values later than January 1, 1970 and the last name 'Smith'.

-- Uses AdventureWorks  
  
SELECT CustomerKey, LastName  
FROM  
   (SELECT * FROM DimCustomer  
    WHERE BirthDate > '01/01/1970') AS DimCustomerDerivedTable  
WHERE LastName = 'Smith'  
ORDER BY LastName;  

S.S. Ejemplo de sugerencia de combinación REDUCEREDUCE join hint example

En el ejemplo siguiente se usa la sugerencia de combinación REDUCE para modificar el procesamiento de la tabla derivada dentro de la consulta.The following example uses the REDUCE join hint to alter the processing of the derived table within the query. Cuando se usa la sugerencia de combinación REDUCE en esta consulta, fis.ProductKey se proyecta, se replica y se distingue, y luego se combina con DimProduct durante la operación de orden aleatorio de DimProduct en ProductKey.When using the REDUCE join hint in this query, the fis.ProductKey is projected, replicated and made distinct, and then joined to DimProduct during the shuffle of DimProduct on ProductKey. La tabla derivada resultante se distribuye en fis.ProductKey.The resulting derived table is distributed on fis.ProductKey.

-- Uses AdventureWorks  
  
EXPLAIN SELECT SalesOrderNumber  
FROM  
   (SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
    FROM DimProduct AS dp   
      INNER REDUCE JOIN FactInternetSales AS fis   
          ON dp.ProductKey = fis.ProductKey  
   ) AS dTable  
ORDER BY SalesOrderNumber;  

T.T. Ejemplo de sugerencia de combinación REPLICATEREPLICATE join hint example

En el ejemplo siguiente se muestra la misma consulta que en el ejemplo anterior, salvo que se usa una sugerencia de combinación REPLICATE en lugar de la sugerencia de combinación REDUCE.This next example shows the same query as the previous example, except that a REPLICATE join hint is used instead of the REDUCE join hint. El empleo de la sugerencia REPLICATE hace que los valores de la columna ProductKey (de combinación) de la tabla FactInternetSales se repliquen en todos los nodos.Use of the REPLICATE hint causes the values in the ProductKey (joining) column from the FactInternetSales table to be replicated to all nodes. La tabla DimProduct se combina con la versión replicada de esos valores.The DimProduct table is joined to the replicated version of those values.

-- Uses AdventureWorks  
  
EXPLAIN SELECT SalesOrderNumber  
FROM  
   (SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
    FROM DimProduct AS dp   
      INNER REPLICATE JOIN FactInternetSales AS fis  
          ON dp.ProductKey = fis.ProductKey  
   ) AS dTable  
ORDER BY SalesOrderNumber;  

U.U. Usar la sugerencia REDISTRIBUTE para garantizar un movimiento de orden aleatorio de una combinación no compatible de distribuciónUsing the REDISTRIBUTE hint to guarantee a Shuffle move for a distribution incompatible join

La siguiente consulta usa la sugerencia de consulta REDISTRIBUTE en una combinación no compatible de distribución.The following query uses the REDISTRIBUTE query hint on a distribution incompatible join. Esto garantiza que el optimizador de consultas use un movimiento de orden aleatorio en el plan de consulta.This guarantees the query optimizer will use a Shuffle move in the query plan. También garantiza que el plan de consulta no use un movimiento de difusión que mueva una tabla distribuida a una tabla replicada.This also guarantees the query plan will not use a Broadcast move which moves a distributed table to a replicated table.

En el ejemplo siguiente, la sugerencia REDISTRIBUTE fuerza un movimiento de orden aleatorio en la tabla FactInternetSales, dado que ProductKey es la columna de distribución de DimProduct y no la columna de distribución de FactInternetSales.In the following example, the REDISTRIBUTE hint forces a Shuffle move on the FactInternetSales table because ProductKey is the distribution column for DimProduct, and is not the distribution column for FactInternetSales.

-- Uses AdventureWorks  
  
EXPLAIN  
SELECT dp.ProductKey, fis.SalesOrderNumber, fis.TotalProductCost  
FROM DimProduct AS dp 
INNER REDISTRIBUTE JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

V.V. Usar TABLESAMPLE para leer datos de un ejemplo de filas de una tablaUsing TABLESAMPLE to read data from a sample of rows in a table

En el siguiente ejemplo se utiliza TABLESAMPLE en la cláusula FROM para devolver aproximadamente el 10 por ciento de todas las filas de la tabla Customer.The following example uses TABLESAMPLE in the FROM clause to return approximately 10 percent of all the rows in the Customer table.

SELECT *  
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;

Consulte tambiénSee Also

CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Operadores (Transact-SQL) Operators (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)