Dicas (Transact-SQL) – junção

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Dicas de junção especificam que o otimizador de consulta força uma estratégia de junção entre duas tabelas no SQL Server. Para obter informações gerais sobre junções e a sintaxe de junção, confira FROM (Transact-SQL).

Cuidado

Como o otimizador de consulta do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, é recomendável que desenvolvedores e administradores de banco de dados experientes usem as dicas apenas como um último recurso.

Aplica-se a

Convenções de sintaxe de Transact-SQL

Sintaxe

<join_hint> ::=   
     { LOOP | HASH | MERGE | REMOTE }  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

LOOP | HASH | MERGE

Especifica que a junção na consulta deve usar loop, hash ou mesclagem. O uso de LOOP | HASH | MERGE JOIN força uma junção específica entre duas tabelas. LOOP não pode ser especificado com RIGHT ou FULL como um tipo de junção. Para obter mais informações, confira as Junções.

REMOTE

Especifica que a operação de junção é executada no site da tabela direita. Isso é útil quando a tabela esquerda é uma tabela local e a tabela direita é uma tabela remota. REMOTE deverá ser usado somente quando a tabela esquerda tiver menos linhas do que a tabela direita.

Se a tabela direita for local, a junção será executada localmente. Se ambas as tabelas forem remotas, mas de fontes de dados diferentes, REMOTE fará com que a junção seja executada no site da tabela direita. Se ambas as tabelas forem tabelas remotas da mesma fonte de dados, REMOTE não será requerido.

REMOTE não poderá ser usado quando um dos valores que são comparados no predicado de junção for lançado em uma ordenação diferente usando a cláusula COLLATE.

REMOTE poderá ser usado somente para operações de INNER JOIN.

Comentários

Dicas de junção são especificadas na cláusula FROM de uma consulta. Dicas de Junção forçam uma estratégia de junção entre duas tabelas. Se uma dica de junção for especificada para qualquer uma das duas tabelas, o otimizador de consulta forçará a ordem de junção automaticamente para todas as tabelas associadas na consulta, com base na posição das palavras-chave ON. Quando CROSS JOIN for usado sem a cláusula ON, poderão ser usados parênteses para indicar a ordem da junção.

Exemplos

a. Usando HASH

O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção HASH. O exemplo usa o banco de dados AdventureWorks2022.

SELECT p.Name, pr.ProductReviewID  
FROM Production.Product AS p  
LEFT OUTER HASH JOIN Production.ProductReview AS pr  
ON p.ProductID = pr.ProductID  
ORDER BY ProductReviewID DESC;  

B. Usando LOOP

O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção LOOP. O exemplo usa o banco de dados AdventureWorks2022.

DELETE FROM Sales.SalesPersonQuotaHistory   
FROM Sales.SalesPersonQuotaHistory AS spqh  
    INNER LOOP JOIN Sales.SalesPerson AS sp  
    ON spqh.SalesPersonID = sp.SalesPersonID  
WHERE sp.SalesYTD > 2500000.00;  
GO  

C. Usando MERGE

O exemplo a seguir especifica que a operação JOIN na consulta é executada por uma junção MERGE. O exemplo usa o banco de dados AdventureWorks2022.

SELECT poh.PurchaseOrderID, poh.OrderDate, pod.ProductID, pod.DueDate, poh.VendorID   
FROM Purchasing.PurchaseOrderHeader AS poh  
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod   
    ON poh.PurchaseOrderID = pod.PurchaseOrderID;  
GO  

Consulte Também

dicas (Transact-SQL)