Consulta SQL não retorna resultados excluidos Usando NOT IN ou NO Exists

SQL Server

13/10/2014

Olá tenho a tabela Tab_funcionários com a Coluna IdFuncionário com valores de 1 a 999. Como vários registro são delatados desta tabela e posteriormente eu os reaproveito criei uma tabela tempTab_funcionários com a Coluna IdFuncionário com uma sequencia de valores completo de 1 a 999 para fazer a comparação com a Primeira.
usando este select:

select * from tempTab_funcionários
where not exists (select * from Tab_funcionários
where tempTab_funcionários.Idfuncionário <> Tab_funcionários.IdFuncionário)

porem ele não retorna valores, sendo que a olho nu percebo que existem varios intervalos que se encaixam nesta solicitação, mas parece que ao serem excluidas as linhas ainda assim constam como valores inseridos?

Por que será? alguem me da uma força por favor?
Hamdem Voguel

Hamdem Voguel

Curtidas 0

Melhor post

Fabiano Carvalho

Fabiano Carvalho

13/10/2014

Se voce precisa retornar o que está em uma tabela e não está na outra, use left join
select a.* from tempTab_funcionários as a
left join Tab_funcionários as b
on a.Idfuncionário = b.Idfuncionário 
where b.Idfuncionário  is null


isso ira retornar todos os registros da tabela tempTab_funcionários que não estão na Tab_funcionários
GOSTEI 1

Mais Respostas

Claudio Lopes

Claudio Lopes

13/10/2014

voce está retornando muitas colunas quando usa o " * ".

A maneira que o fabiano te informou é a mais correta, porém tem dessa forma

select * from tempTab_funcionários
where idFuncionario not exists (select idFuncionario from Tab_funcionários
where tempTab_funcionários.Idfuncionário <> Tab_funcionários.IdFuncionário)


olhe que eu coloquei um campo (coluna) chamado de idFuncionario.
GOSTEI 1
Hamdem Voguel

Hamdem Voguel

13/10/2014

Fabiano realmente não tinha pensado na possibilidade de usar o left join.. batata... retornou os itens da comparação.
Din o seu retornou o mesmo resultado apos alguns acertos...

select * from tempTab_funcionários r
where r.IdFuncionário not in (select v.IdFuncionário from Tab_funcionários v
where r.Idfuncionário = v.IdFuncionário)


Obrigado pela a ajuda de vocês foi de grande aproveitamento.
GOSTEI 0
Claudio Lopes

Claudio Lopes

13/10/2014

Quem bom que deu certo! Abraços
GOSTEI 0
POSTAR