{"id":35543,"date":"2024-06-13T16:06:05","date_gmt":"2024-06-13T19:06:05","guid":{"rendered":"https:\/\/www.locaweb.com.br\/ajuda\/?post_type=ht_kb&#038;p=35543"},"modified":"2024-06-13T16:06:05","modified_gmt":"2024-06-13T19:06:05","slug":"not-in-sql","status":"publish","type":"ht_kb","link":"https:\/\/www.locaweb.com.br\/ajuda\/wiki\/not-in-sql\/","title":{"rendered":"Not In em SQL: o que \u00e9 e quando usar?"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">A linguagem SQL \u00e9 uma ferramenta vital para a manipula\u00e7\u00e3o e consulta de dados no vasto mundo dos bancos de dados.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O NOT IN, entre suas v\u00e1rias cl\u00e1usulas e operadores, \u00e9 um comando poderoso que permite aos desenvolvedores filtrar resultados de forma precisa.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Este artigo examina o conceito de NOT IN em SQL, examinando sua sintaxe, funcionamento e casos em que seu uso \u00e9 mais adequado.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Os especialistas em banco de dados podem evitar armadilhas comuns e otimizar suas consultas para obter resultados mais r\u00e1pidos e precisos ao entender o NOT IN.<\/span><\/p>\n<h2>O que \u00e9 o operador &#8220;Not IN&#8221;<\/h2>\n<p><span style=\"font-weight: 400;\">O <\/span><b>operador &#8220;NOT IN&#8221;<\/b><span style=\"font-weight: 400;\"> \u00e9 uma constru\u00e7\u00e3o l\u00f3gica utilizada em linguagens de consulta de bancos de dados, como SQL, para filtrar resultados com base em crit\u00e9rios espec\u00edficos. Ele permite selecionar registros que n\u00e3o correspondem a determinados valores em uma coluna ou conjunto de valores definidos.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quando aplicado em uma consulta, o operador &#8220;NOT IN&#8221; atua como um filtro negativo, excluindo registros que atendem a certas condi\u00e7\u00f5es. Ele \u00e9 especialmente \u00fatil quando se deseja realizar consultas que envolvem a exclus\u00e3o de resultados associados a um conjunto espec\u00edfico de valores.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ao utilizar o operador &#8220;NOT IN&#8221;, \u00e9 poss\u00edvel especificar uma lista de valores que n\u00e3o devem estar presentes em uma determinada coluna. Isso permite uma flexibilidade significativa na cria\u00e7\u00e3o de consultas complexas, possibilitando a exclus\u00e3o precisa de dados indesejados.\u00a0\u00a0<\/span><\/p>\n<h3>Qual a sua sintaxe? <span style=\"font-weight: 400;\">\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">A estrutura b\u00e1sica do operador &#8220;NOT IN&#8221; em uma consulta SQL \u00e9 a seguinte:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">```sql<\/span>\r\n\r\n<span style=\"font-weight: 400;\">SELECT coluna1\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">FROM tabela1\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">WHERE coluna1 NOT IN (valor1, valor2, valor3, ...);\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">```<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Nesta constru\u00e7\u00e3o:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8211; &#8220;coluna1&#8221; representa a coluna na qual a condi\u00e7\u00e3o &#8220;NOT IN&#8221; ser\u00e1 aplicada.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8211; &#8220;tabela1&#8221; \u00e9 a tabela da qual os dados est\u00e3o sendo selecionados.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8211; &#8220;(valor1, valor2, valor3, &#8230;)&#8221; \u00e9 uma enumera\u00e7\u00e3o de valores que ser\u00e3o exclu\u00eddos da sele\u00e7\u00e3o. Esses valores podem ser constantes, express\u00f5es ou at\u00e9 mesmo resultados de subconsultas.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O operador &#8220;NOT IN&#8221; retorna todas as linhas da tabela &#8220;tabela1&#8221; onde os valores na coluna &#8220;coluna1&#8221; n\u00e3o correspondem a nenhum dos valores especificados na lista.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00c9 fundamental notar que os valores entre par\u00eanteses ap\u00f3s o operador &#8220;NOT IN&#8221; podem ser uma lista de valores separados por v\u00edrgulas, uma subconsulta que retorna uma lista de valores ou at\u00e9 mesmo uma express\u00e3o que gera uma lista de valores.<\/span><\/p>\n<h2>Diferen\u00e7a para o &#8220;Not EXISTS&#8221;<\/h2>\n<p><span style=\"font-weight: 400;\">Quando falamos em consultas em bancos de dados relacionais, \u00e9 crucial discernir entre os operadores &#8220;NOT IN&#8221; e &#8220;NOT EXISTS&#8221;. Embora ambos filtrem resultados com base em condi\u00e7\u00f5es espec\u00edficas, suas abordagens s\u00e3o distintas e podem influenciar o desempenho e os resultados das consultas de maneiras diversas.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O operador &#8220;NOT IN&#8221; exclui resultados que correspondem a valores espec\u00edficos em uma coluna, comparando os valores da coluna com uma lista fornecida. Os registros com valores correspondentes na lista s\u00e3o eliminados do resultado da consulta.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Por exemplo, podemos utilizar &#8220;NOT IN&#8221; para selecionar clientes n\u00e3o associados a determinados c\u00f3digos de produto:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">```<\/span>\r\n\r\n<span style=\"font-weight: 400;\">SELECT *\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">FROM clientes\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">WHERE cliente_id NOT IN (SELECT cliente_id FROM pedidos WHERE codigo_produto IN ('001', '002', '003'));\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">```<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Por outro lado, o operador &#8220;NOT EXISTS&#8221; verifica a inexist\u00eancia de registros em uma subconsulta correlacionada. Em vez de comparar valores diretamente, ele avalia se a subconsulta retorna algum resultado. Se a subconsulta n\u00e3o retornar nenhum resultado, o registro na consulta principal \u00e9 inclu\u00eddo no resultado final.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Um exemplo comum \u00e9 selecionar funcion\u00e1rios sem registros em uma tabela de hist\u00f3rico de avalia\u00e7\u00f5es:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">```<\/span>\r\n\r\n<span style=\"font-weight: 400;\">SELECT *\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">FROM funcionarios f\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">WHERE NOT EXISTS (SELECT 1 FROM historico_avaliacoes ha WHERE ha.funcionario_id = f.funcionario_id);\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">```<\/span><\/pre>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Quanto ao desempenho, o operador &#8220;NOT EXISTS&#8221; tende a ser mais eficiente em algumas circunst\u00e2ncias, especialmente quando a subconsulta retorna um grande volume de registros. Isso ocorre porque o SQL pode otimizar a consulta para parar a execu\u00e7\u00e3o assim que encontrar um resultado na subconsulta. Por outro lado, o &#8220;NOT IN&#8221; pode ser menos eficaz, especialmente com listas longas na cl\u00e1usula, ou na presen\u00e7a de valores nulos, pois cada valor precisa ser comparado individualmente.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Em rela\u00e7\u00e3o ao tratamento de valores nulos, o &#8220;NOT IN&#8221; pode produzir resultados inesperados, pois o resultado ser\u00e1 sempre desconhecido (nulo) se houver um valor nulo na lista, resultando na exclus\u00e3o de todos os registros, mesmo que haja correspond\u00eancias v\u00e1lidas. J\u00e1 o &#8220;NOT EXISTS&#8221; lida melhor com valores nulos, avaliando a exist\u00eancia de registros na subconsulta sem depender de compara\u00e7\u00f5es diretas.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Do ponto de vista sem\u00e2ntico, enquanto o &#8220;NOT IN&#8221; compara valores diretamente, o &#8220;NOT EXISTS&#8221; verifica a exist\u00eancia de registros em uma subconsulta correlacionada, tornando as consultas com este \u00faltimo mais orientadas ao conjunto de dados e menos dependentes de valores espec\u00edficos.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Por fim, &#8220;NOT IN&#8221; \u00e9 \u00fatil para comparar diretamente valores, enquanto &#8220;NOT EXISTS&#8221; \u00e9 melhor para verificar a exist\u00eancia de registros em subconsultas relacionadas, fornecendo flexibilidade e melhor desempenho em alguns cen\u00e1rios de consulta.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ao contr\u00e1rio de outras opera\u00e7\u00f5es comuns em consultas SQL, como &#8220;NOT LIKE&#8221;, &#8220;NOT BETWEEN&#8221;, &#8220;NOT Less Than&#8221; e &#8220;NOT GREATER THAN&#8221;, elas excluem os resultados com base em crit\u00e9rios espec\u00edficos, como valores, padr\u00f5es de texto ou intervalos. Os requisitos da consulta e os crit\u00e9rios de exclus\u00e3o determinam a escolha entre eles.<\/span><\/p>\n<h2>Como usar o Not IN em SQL?<span style=\"font-weight: 400;\">\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Para usar o operador &#8220;NOT IN&#8221; em uma consulta SQL, voc\u00ea precisa seguir a seguinte estrutura:\u00a0<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Selecione a coluna ou colunas desejadas: <\/b><span style=\"font-weight: 400;\">Comece a consulta indicando quais colunas voc\u00ea deseja selecionar.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Especifique a tabela:<\/b><span style=\"font-weight: 400;\"> Indique a tabela da qual voc\u00ea est\u00e1 selecionando os dados.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Aplique a condi\u00e7\u00e3o &#8220;NOT IN&#8221;:<\/b><span style=\"font-weight: 400;\"> Utilize a cl\u00e1usula &#8220;WHERE&#8221; para aplicar a condi\u00e7\u00e3o &#8220;NOT IN&#8221;. Dentro desta cl\u00e1usula, indique a coluna que voc\u00ea deseja filtrar, seguida do operador &#8220;NOT IN&#8221;, e uma lista de valores entre par\u00eanteses. Esta lista representa os valores que voc\u00ea deseja excluir da sele\u00e7\u00e3o.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Finalize a consulta:<\/b><span style=\"font-weight: 400;\"> Encerre a consulta como de costume.\u00a0<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Ao usar o operador &#8220;NOT IN&#8221;, \u00e9 importante garantir que a lista de valores fornecida seja adequada para a exclus\u00e3o dos resultados desejados. Esta lista pode conter valores expl\u00edcitos, express\u00f5es ou subconsultas que retornam uma lista de valores.\u00a0<\/span><\/p>\n<p><b>Exemplo<\/b><\/p>\n<p><span style=\"font-weight: 400;\">alguns exemplos de uso do operador &#8220;NOT IN&#8221; em consultas SQL:\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Selecionar todos os alunos que n\u00e3o est\u00e3o matriculados em nenhum dos cursos de matem\u00e1tica:\u00a0<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM alunos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE id_aluno NOT IN (SELECT id_aluno FROM matriculas WHERE id_curso = 'Matem\u00e1tica'); <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/pre>\n<p><b>Selecionar todos os funcion\u00e1rios que n\u00e3o est\u00e3o nos departamentos de vendas ou marketing:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM funcionarios <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE departamento NOT IN ('Vendas', 'Marketing')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os produtos que n\u00e3o est\u00e3o nas categorias de eletr\u00f4nicos ou vestu\u00e1rio:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM produtos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE categoria NOT IN ('Eletr\u00f4nicos', 'Vestu\u00e1rio')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os pedidos que n\u00e3o foram feitos por clientes VIP:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM pedidos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE id_cliente NOT IN (SELECT id_cliente FROM clientes WHERE status = 'VIP')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os registros de vendas que n\u00e3o foram feitos em pa\u00edses listados em uma tabela de pa\u00edses restritos:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM vendas <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE pais_venda NOT IN (SELECT pais FROM paises_restritos)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Esses exemplos demonstram como o operador &#8220;NOT IN&#8221; pode ser usado para filtrar resultados com base em valores espec\u00edficos que devem ser exclu\u00eddos da sele\u00e7\u00e3o. Isso proporciona flexibilidade ao criar consultas SQL que atendem a crit\u00e9rios de exclus\u00e3o espec\u00edficos.\u00a0\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Com strings<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Em SQL, \u00e9 comum usar o operador &#8220;NOT IN&#8221; para filtrar os resultados com base em valores espec\u00edficos em colunas com strings. Essa opera\u00e7\u00e3o se torna particularmente relevante quando os dados s\u00e3o armazenados como strings, pois permite a exclus\u00e3o de resultados com base em padr\u00f5es de texto espec\u00edficos.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A sensibilidade a mai\u00fasculas e min\u00fasculas (case-sensitivity) e os caracteres especiais que podem estar presentes nos valores de string devem ser levados em considera\u00e7\u00e3o ao usar o operador &#8220;NOT IN&#8221; com strings. O SGBD (Sistema de Gerenciamento de Banco de Dados) pode ser sens\u00edvel ou insens\u00edvel a strings mai\u00fasculas e min\u00fasculas.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O operador &#8220;NOT IN&#8221; funciona de forma semelhante \u00e0s colunas num\u00e9ricas quando usado em colunas de strings.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Exemplo<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Esses exemplos mostram como o operador &#8220;NOT IN&#8221; pode ser usado em consultas SQL com strings para filtrar resultados de acordo com valores espec\u00edficos que devem ser exclu\u00eddos da sele\u00e7\u00e3o. Isso permite que voc\u00ea crie consultas que atendem a requisitos de exclus\u00e3o espec\u00edficos de dados textuais.\u00a0<\/span><\/p>\n<p><b>Selecionar todos os produtos que n\u00e3o s\u00e3o de uma determinada marca:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM produtos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE marca NOT IN ('Samsung', 'Apple', 'LG')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os clientes que n\u00e3o est\u00e3o em uma lista espec\u00edfica de pa\u00edses:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM clientes <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE pais NOT IN ('Brasil', 'Estados Unidos', 'Canad\u00e1');<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os funcion\u00e1rios que n\u00e3o t\u00eam um cargo espec\u00edfico:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM funcionarios <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE cargo NOT IN ('Gerente', 'Assistente', 'Analista')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os pedidos que n\u00e3o est\u00e3o em um estado espec\u00edfico:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM pedidos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE estado_pedido NOT IN ('Pendente', 'Em andamento')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os produtos que n\u00e3o cont\u00eam uma palavra-chave espec\u00edfica em seu nome:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM produtos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE nome_produto NOT LIKE '%Smartphone%';\u00a0<\/span><\/pre>\n<h3><b>Com subqueries\u00a0\u00a0<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">As subconsultas, tamb\u00e9m conhecidas como subqueries, s\u00e3o consultas que s\u00e3o inseridas dentro de consultas maiores. Isso d\u00e1 ao SQL uma ferramenta poderosa para realizar opera\u00e7\u00f5es adapt\u00e1veis e complexas em bancos de dados relacionais. Podem ser usados em v\u00e1rias partes de uma consulta SQL, incluindo as cl\u00e1usulas SELECT, FROM, WHERE, HAVING e at\u00e9 mesmo nas instru\u00e7\u00f5es INSERT, UPDATE e DELETE.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00c9 poss\u00edvel realizar opera\u00e7\u00f5es de nega\u00e7\u00e3o com precis\u00e3o e efici\u00eancia usando subconsultas e o operador &#8220;NOT IN&#8221;. Uma cl\u00e1usula &#8220;NOT IN&#8221; pode conter subconsultas que fornecem um conjunto de valores que n\u00e3o est\u00e3o na sele\u00e7\u00e3o principal da consulta. Esse recurso \u00e9 particularmente \u00fatil quando se trata de filtrar resultados baseados em crit\u00e9rios espec\u00edficos que n\u00e3o s\u00e3o facilmente expressos com outras cl\u00e1usulas SQL.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Exemplo<\/span><\/h4>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM clientes <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE id_cliente NOT IN (SELECT id_cliente FROM pedidos)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os produtos que nunca foram vendidos:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM produtos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE id_produto NOT IN (SELECT id_produto FROM vendas)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os funcion\u00e1rios que n\u00e3o t\u00eam avalia\u00e7\u00f5es de desempenho:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM funcionarios <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE id_funcionario NOT IN (SELECT id_funcionario FROM avaliacoes_desempenho)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Esses exemplos demonstram como subconsultas podem ser usadas em conjunto com o operador &#8220;NOT IN&#8221; para realizar consultas complexas e filtrar resultados com base em crit\u00e9rios espec\u00edficos de exclus\u00e3o em bancos de dados relacionais.\u00a0<\/span><\/p>\n<h3><b>Com n\u00fameros <\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Uma pr\u00e1tica importante para filtrar resultados com base em crit\u00e9rios espec\u00edficos \u00e9 o uso frequente do operador &#8220;NOT IN&#8221; com n\u00fameros, que \u00e9 bastante comum em consultas SQL. Ao trabalhar com n\u00fameros em SQL, \u00e9 fundamental ter em mente o tipo de dados das colunas envolvidas e a maneira como os valores num\u00e9ricos s\u00e3o comparados.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pode-se usar o &#8220;NOT IN&#8221; para colunas que armazenam n\u00fameros, como inteiros ou decimais, bem como para valores num\u00e9ricos espec\u00edficos que s\u00e3o apresentados na lista. Ele oferece uma maneira eficaz de filtrar resultados baseados em crit\u00e9rios num\u00e9ricos, excluindo os resultados que correspondem a esses valores da sele\u00e7\u00e3o final da consulta.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ao aprender os princ\u00edpios b\u00e1sicos de como o &#8220;NOT IN&#8221; funciona com n\u00fameros em SQL, desenvolvedores e analistas de dados podem criar consultas mais precisas e eficientes para atender \u00e0s necessidades de an\u00e1lise e manipula\u00e7\u00e3o de dados num\u00e9ricos em bancos de dados relacionais.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Exemplo<\/span><\/h4>\n<p><b>Selecionar todos os produtos que n\u00e3o est\u00e3o na faixa de pre\u00e7o entre 10 e 100:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM produtos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE preco_produto NOT IN (SELECT preco FROM faixa_preco WHERE preco BETWEEN 10 AND 100);<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os clientes que n\u00e3o t\u00eam idade entre 18 e 30 anos:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM clientes <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE idade_cliente NOT IN (18, 19, 20, ..., 30)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os pedidos que n\u00e3o t\u00eam um valor total espec\u00edfico:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM pedidos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE valor_total_pedido NOT IN (SELECT valor_total FROM pedidos_anulados)<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Esses exemplos ilustram como o operador &#8220;NOT IN&#8221; pode ser aplicado a valores num\u00e9ricos em consultas SQL para realizar filtragens precisas com base em crit\u00e9rios espec\u00edficos de exclus\u00e3o.\u00a0<\/span><\/p>\n<h3>Com datas <span style=\"font-weight: 400;\">\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Opera\u00e7\u00f5es com datas s\u00e3o comuns em consultas SQL, especialmente quando os resultados devem ser filtrados por crit\u00e9rios temporais. Para an\u00e1lise de dados hist\u00f3ricos, agendamento de eventos e gerenciamento de prazos, o uso do operador &#8220;NOT IN&#8221; permite excluir os resultados correspondentes a datas ou intervalos espec\u00edficos da sele\u00e7\u00e3o final da consulta.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ao trabalhar com datas em SQL, \u00e9 fundamental ter em mente o formato adequado para o banco de dados utilizado, bem como a maneira como s\u00e3o comparadas e armazenadas. Isso varia entre v\u00e1rios sistemas de gerenciamento de banco de dados (SGBDs), incluindo MySQL, PostgreSQL e SQL Server. Pode-se usar o operador &#8220;NOT IN&#8221; para colunas que armazenam datas e valores de datas espec\u00edficos na lista; isso permite excluir os resultados relacionados a essas datas.<\/span><\/p>\n<h4><b>Exemplo<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/h4>\n<p><b>Selecionar todos os eventos que n\u00e3o ocorreram em uma determinada data:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM eventos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE data_evento NOT IN ('2024-04-01', '2024-04-02', '2024-04-03')<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os registros de vendas que n\u00e3o foram realizados no m\u00eas passado:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM vendas <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE data_venda NOT IN (SELECT DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH))<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><b>Selecionar todos os compromissos agendados que n\u00e3o est\u00e3o no pr\u00f3ximo m\u00eas:\u00a0<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SELECT * <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">FROM compromissos <\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">WHERE data_compromisso NOT IN (SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH));<\/span><span style=\"font-weight: 400;\">\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Esses exemplos ilustram como o operador &#8220;NOT IN&#8221; pode ser aplicado a valores de data em consultas SQL para realizar filtragens precisas com base em crit\u00e9rios temporais espec\u00edficos de exclus\u00e3o.\u00a0<\/span><\/p>\n<h2>Regras e boas pr\u00e1ticas<span style=\"font-weight: 400;\">\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Aqui est\u00e3o algumas regras e boas pr\u00e1ticas a serem seguidas:\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">1. Entenda a Estrutura da Consulta<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Antes de empregar o operador &#8220;NOT IN&#8221;, \u00e9 crucial entender a estrutura da consulta na qual ele ser\u00e1 utilizado. Isso inclui identificar as colunas envolvidas na consulta e os crit\u00e9rios de exclus\u00e3o que ser\u00e3o aplicados. Uma compreens\u00e3o clara da estrutura da consulta ajuda a garantir a precis\u00e3o dos resultados.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">2. Verifique a Correla\u00e7\u00e3o das Subconsultas<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Ao utilizar subconsultas com o operador &#8220;NOT IN&#8221;, \u00e9 importante verificar se h\u00e1 correla\u00e7\u00e3o adequada entre a subconsulta e a consulta principal. Subconsultas correlacionadas dependem dos valores da consulta principal para fornecer resultados precisos. Isso garante que a l\u00f3gica da consulta esteja correta e os resultados sejam consistentes.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">3. Considere a Sensibilidade a Mai\u00fasculas e Min\u00fasculas<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Em consultas que envolvem strings, \u00e9 essencial considerar a sensibilidade a mai\u00fasculas e min\u00fasculas. Dependendo do Sistema de Gerenciamento de Banco de Dados (SGBD) utilizado, as compara\u00e7\u00f5es de strings podem ser sens\u00edveis ou insens\u00edveis a mai\u00fasculas e min\u00fasculas. Isso pode afetar os resultados da consulta, portanto, verifique e ajuste conforme necess\u00e1rio.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">4. Garanta a Consist\u00eancia dos Tipos de Dados<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Ao aplicar o operador &#8220;NOT IN&#8221; a valores num\u00e9ricos, de datas ou de strings, certifique-se de que os tipos de dados s\u00e3o consistentes. Os valores fornecidos na lista ap\u00f3s o operador &#8220;NOT IN&#8221; devem corresponder ao tipo de dados da coluna sendo comparada. Isso evita erros de compara\u00e7\u00e3o e garante a precis\u00e3o dos resultados.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">5. Otimize o Desempenho da Consulta<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Para consultas que envolvem grandes conjuntos de dados, \u00e9 crucial otimizar o desempenho. Considere estrat\u00e9gias alternativas ao operador &#8220;NOT IN&#8221;, como jun\u00e7\u00f5es ou subconsultas correlacionadas, dependendo da complexidade da consulta e da estrutura do banco de dados. Isso ajuda a garantir que suas consultas sejam executadas de forma eficiente e r\u00e1pida.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ao adotar as regras e boas pr\u00e1ticas para o uso do operador &#8220;NOT IN&#8221; em consultas SQL, os profissionais de banco de dados e desenvolvedores podem otimizar suas consultas, garantindo resultados precisos e eficientes. Compreender a estrutura da consulta, verificar a correla\u00e7\u00e3o das subconsultas e garantir a consist\u00eancia dos tipos de dados s\u00e3o passos essenciais para garantir a efic\u00e1cia das consultas.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Al\u00e9m disso, ao considerar a sensibilidade a mai\u00fasculas e min\u00fasculas e otimizar o desempenho da consulta, os profissionais podem garantir que suas consultas atendam \u00e0s necessidades de an\u00e1lise de dados de forma eficiente. Ao seguir estas pr\u00e1ticas, os usu\u00e1rios podem extrair insights valiosos de seus bancos de dados de forma mais eficaz.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Se voc\u00ea est\u00e1 buscando op\u00e7\u00f5es de hospedagem dedicada para seu banco de dados, a<\/span><a href=\"https:\/\/www.locaweb.com.br\/hospedagem-dedicada\/\"> <span style=\"font-weight: 400;\">Locaweb &#8211; Hospedagem Dedicada<\/span><\/a><span style=\"font-weight: 400;\"> oferece solu\u00e7\u00f5es robustas e confi\u00e1veis. Da mesma forma, se estiver considerando a escalabilidade e flexibilidade de uma Cloud VPS para suas opera\u00e7\u00f5es de banco de dados, confira a<\/span><a href=\"https:\/\/www.locaweb.com.br\/servidor-vps\/\"> <span style=\"font-weight: 400;\">Locaweb &#8211; Cloud VPS<\/span><\/a><span style=\"font-weight: 400;\">, que oferece recursos avan\u00e7ados para atender \u00e0s demandas do seu neg\u00f3cio.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Combinando as melhores pr\u00e1ticas em consultas SQL com uma infraestrutura de hospedagem confi\u00e1vel, voc\u00ea estar\u00e1 preparado para enfrentar os desafios de gerenciamento de dados de forma eficaz e eficiente.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A linguagem SQL \u00e9 uma ferramenta vital para a manipula\u00e7\u00e3o e consulta de dados no vasto mundo dos bancos de dados. O NOT IN, entre suas v\u00e1rias cl\u00e1usulas e operadores, \u00e9 um comando poderoso que permite aos desenvolvedores filtrar resultados de forma precisa. Este artigo examina o conceito de NOT&#8230;<\/p>\n","protected":false},"author":29,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[118],"ht-kb-tag":[],"class_list":["post-35543","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-vps-locaweb"],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/35543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/comments?post=35543"}],"version-history":[{"count":1,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/35543\/revisions"}],"predecessor-version":[{"id":35544,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/35543\/revisions\/35544"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/media?parent=35543"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-category?post=35543"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-tag?post=35543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}