Olá Victorino , tudo bem?
Estou com duvida na query " delete from PRODUTOS where CODIGO not in (select CODIGO_ID_PRODUTO from TABELA_DE_PRODUTOS); "
Porque usar o NOT IN na query e não o NOT EXISTS?
Olá Victorino , tudo bem?
Estou com duvida na query " delete from PRODUTOS where CODIGO not in (select CODIGO_ID_PRODUTO from TABELA_DE_PRODUTOS); "
Porque usar o NOT IN na query e não o NOT EXISTS?
Olá Tiago, vou tomar a liberdade para tentar responder sua dúvida. Qualquer coisa o Victorino me corrige.
NOT IN
e NOT EXISTS
possuem comportamentos diferentes quanto ao tratamento de valores NULOS.
Usando IN
ou NOT IN
retornará NULL na comparação com valores da Subquery, enquanto que usando EXISTS
NOT EXISTS
você não teria esse impacto dos valores nulos por ser verificado exclusivamente a existencia das tuplas/registros que retornam da Subquery.
Ex:
SELECT *
FROM
table_name
WHERE
id NOT IN(subquery);
Vamos considerar que a subquery
retorne os valores 1, 2, 3 e NULL
, então a query poderia ser rescrita assim:
SELECT *
FROM
table_name
WHERE
id = 1
OR id = 2
OR id = 3
OR id = NULL;
E dessa forma essa query sempre retornará NULL por que NULL não pode ser comparado com nada.
Faz esse testes ae!
Abs,
Olá Tiago, tudo bem? É isso mesmo que o Wagner falou, vou tentar contribuir com a resposta do Wagner! Bem como o Wagner argumentou "NOT IN
e NOT EXISTS
possuem comportamentos diferentes quanto ao tratamento de valores NULOS". Assim, se algum dos valores presentes bloco que será utilizado pelo NOT IN
tiver o valor NULL
então a query sempre irá retornar NULL
, já o operador NOT EXISTS
verifica apenas a existência de linhas na subconsulta, portanto valores NULL
não afetam o resultado da query.
Espero ter contribuído!