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 ..