Você pode usar uma
left outer join
para realizar isso:select
t1.tid
from
table1 t1
left outer join table2 t2 on
t1.tid = t2.tid
where
t2.tid is null
O que isso faz é pegar sua primeira tabela (
table1
), une-o com sua segunda tabela (table2
) e preenche null
para a table2
colunas em qualquer linha em table1
que não corresponde a uma linha em table2
. Em seguida, ele filtra isso selecionando apenas a table1
linhas onde nenhuma correspondência pôde ser encontrada. Como alternativa, você também pode usar
not exists
:select
t1.tid
from
table1 t1
where
not exists (select 1 from table2 t2 where t2.tid = t1.tid)
Isso executa uma
left semi join
, e fará essencialmente a mesma coisa que a left outer join
faz. Dependendo de seus índices, um pode ser mais rápido que o outro, mas ambos são opções viáveis. O MySQL tem uma boa documentação sobre otimizar as junções , então você deve verificar isso ..