# INNER JOIN

INNER JOIN (junção interna) é uma Operação JOIN que permite especificar uma cláusula de junção explícita.

#### Sintaxe

    ExpressãoTabela [ INNER ] JOIN ExpressãoTabela { ON ExpressãoBooleana }

A cláusula de junção pode ser especificada utilizando ON com uma expressão booleana.

O escopo das expressões na cláusula ON inclui as tabelas correntes, e as tabelas nos blocos de consulta externos ao SELECT corrente. No exemplo a seguir, a cláusula ON faz referência às tabelas correntes:

    SELECT *
    FROM SAMP.EMPREGADOS INNER JOIN SAMP.EQUIPES
    ON EMPREGADOS.SAL�?RIO < EQUIPES.SAL�?RIO;

A cláusula ON pode fazer referência a tabelas que não estão sendo juntadas, e não é obrigada a fazer referência a nenhuma das tabelas sendo juntadas (embora tipicamente o faça).

    -- Junção das tabelas ATIV_EMP e EMPREGADOS
    -- selecionar todas as colunas da tabela ATIV_EMP e
    -- adicionar o sobrenome do empregado (ÚLTIMO_NOME) da tabela
    -- EMPREGADOS a todas as linhas do resultado
    SELECT SAMP.ATIV_EMP.*, ÚLTIMO_NOME
         FROM SAMP.ATIV_EMP JOIN SAMP.EMPREGADO
         ON ATIV_EMP.NUM_EMP = EMPREGADOS.NUM_EMP;

    -- Juntar as tabelas EMPREGADOS e DEPARTAMENTOS,
    -- selecionar o número do empregado (NUM_EMP),
    -- o sobrenome do empregado (ÚLTIMO_NOME),
    -- o número do departamento (DEP_TRAB na tabela EMPREGADOS e
    -- NUM_DEP na tabela DEPARTAMENTOS)
    -- e o nome do departamento (NOME_DEP)
    -- de todos os empregados nascidos (DATA_NASC) antes de 1930.
    SELECT NUM_EMP, ÚLTIMO_NOME, DEP_TRAB, NOME_DEP
         FROM SAMP.EMPREGADOS JOIN SAMP.DEPARTAMENTOS
         ON DEP_TRAB = NUM_DEP
         AND YEAR(DATA_NASC) < 1930;

    -- Outro exemplo de "gerar" novos valores de dado,
    -- utilizando uma consulta que seleciona da cláusula VALUES
    -- (que é uma forma alternativa de FULLSELECT).
    SELECT *
    FROM (VALUES (3, 4), (1, 5), (2, 6))
    AS TABELA1_VALORES(C1, C2)
    JOIN (VALUES (3, 2), (1, 2),(0, 3))
    AS TABELA2_VALORES(C1, C2)
    ON TABELA1_VALORES.C1 = TABELA2_VALORES.C1;

    O que resulta em:

    C1         |C2         |C1         |2
    -----------------------------------------------
    3          |4          |3          |2
    1          |5          |1          |2

    -- Listar todos os departamentos, juntamente com o
    -- número do empregado e o último nome do gerente
    SELECT NUM_DEP, NOME_DEP, NUM_EMP, ÚLTIMO_NOME
    FROM DEPARTAMENTOS
         INNER JOIN EMPREGADOS
         ON NUM_GER = NUM_EMP;

    -- Listar todos os números do empregado e último nome, juntamente
    -- com o número do empregado e último nome de seus gerentes
    SELECT E.NUM_EMP, E.ÚLTIMO_NOME, M.NUM_EMP, M.ÚLTIMO_NOME
            FROM EMPREGADOS E INNER JOIN
            DEPARTAMENTOS INNER JOIN EMPREGADOS M
            ON NUM_GER = M.NUM_EMP
            ON E.DEP_TRAB = NUM_DEP;

Tópico pai: Instruções
Conceitos relacionados
Interação com o sistema de dependências
Instruções CREATE
Instruções DROP
Instruções RENAME
Instruções SET
Referências relacionadas
Instrução ALTER TABLE
CALL (PROCEDIMENTO)
Cláusula CONSTRAINT
Instrução DECLARE GLOBAL TEMPORARY TABLE
Instrução DELETE
Cláusula FOR UPDATE
Cláusula FROM
Cláusula GROUP BY
Cláusula HAVING
Instrução INSERT
Operação JOIN
LEFT OUTER JOIN
Instrução LOCK TABLE
Cláusula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
ExpressãoSeleção
Instrução SELECT
ExpressãoTabela
SubconsultaTabela
Instrução UPDATE
VALUES Expressão
Cláusula WHERE
Cláusula WHERE CURRENT OF