quarta-feira, janeiro 29, 2025

Insights que transformam sua carreira!

Receba soluções práticas, dicas que economizam tempo e insights exclusivos de programação que realmente funcionam. Junte-se a mais de 5.000 assinantes!

A Coragem de Não Agradar

Como a filosofia pode ajudar você a se libertar da opinião dos outros, superar suas limitações e se tornar a pessoa que deseja.

Comprar Agora

Café com Deus Pai 2025

Porções diárias de transformação para inspirar e renovar sua fé ao longo do ano.

Comprar Agora

Samsung T350 - Monitor Gamer

Monitor Gamer, 24", FHD, 75Hz, HDMI, VGA, Freesync, Preto. Ideal para jogos e produtividade!

Comprar Agora

Instrução SQL: WHERE + 1 entenda como funciona

Trezor One Wallet Black

Proteja seus ativos digitais com segurança de ponta. Fácil de usar, ideal para manter suas criptomoedas seguras e acessíveis.

Saiba Mais

NerdMiner V2 Ultra 78KH/S

Um minerador compacto e eficiente com baixo consumo de energia. Ganhe enquanto aprende sobre mineração com o NerdMiner.

Saiba Mais

Totem Auto Atendimento Completo

Melhore a eficiência do seu negócio com este Totem de Autoatendimento. Ideal para restaurantes, eventos ou lojas.

Saiba Mais

Compartilhe:

A verdade da questão é que a cláusula WHERE 1=1 é meramente uma convenção adotada por alguns desenvolvedores para tornar o trabalho com suas instruções SQL um pouco mais fácil, tanto na forma estática quanto dinâmica.

VAI GOSTAR:

21 comandos SQL essenciais e avançados e conteúdos extras

Melhores práticas em modelagem de banco de dados e SQL

SQL – Diferenças entre Not IN e Not EXISTS

Dê um Salto na Sua Carreira!

Receba dicas práticas, soluções objetivas e insights exclusivos que já impactaram mais de 5.000 profissionais.

🚀 Aprimore suas Habilidades DevOps!

Descubra como otimizar fluxos de trabalho, melhorar a integração contínua e revolucionar o gerenciamento de projetos no mundo DevOps. Acesse agora!

Saiba Mais

💻 Torne-se um Desenvolvedor Fullstack!

Domine as tecnologias mais requisitadas do mercado e conquiste sua carreira dos sonhos como Desenvolvedor Fullstack. Inscreva-se hoje!

Inscreva-se

Também é uma prática comum ao criar uma consulta SQL programaticamente. É mais fácil começar com ‘WHERE 1=1 ‘ e, em seguida, acrescentar outros critérios, como ‘ AND customer.id=:custId’, dependendo se um ID de cliente é ou não fornecido. Isso permite que o desenvolvedor acrescente o próximo critério na consulta começando com ‘AND…’. Aqui está um exemplo hipotético:

stmt  = "SELECT * "
stmt += "FROM TABLE "
stmt += "WHERE 1=1 "
if user chooses option a then stmt += "and A is not null "
if user chooses option b then stmt += "and B is not null "
if user chooses option b then stmt += "and C is not null "
if user chooses option b then stmt += "and D is not null "

Pontos interessantes a serem levantados para esta solução com WHERE 1 = 1.

Clareza de código

Uma vantagem desta técnica é que o código acaba ficando mais limpo, pois assim não precisa existir o controle da presença do WHERE vs AND/OR, mantendo independente a ordem dos filtros que vão entrar na consulta e se algum filtro vai entrar na consulta.

Impacto na performance

Existe uma dúvida recorrente com relação ao impacto de performance no banco de dados da presença do WHERE 1 = 1, independente se há outros filtros ou não. O que posso dizer que a maioria dos bancos de dados não sofre qualquer impacto de performance ao utilizar esta técnica.

Fazendo uma análise de impacto na plano de execução do Sql Server, com 10.000 registros em uma tabela, não notou-se qualquer mudança entre o plano contendo WHERE 1 = 1 e do plano sem o mesmo.

Outra opção

Alguns bancos de dados suportam também WHERE 1, embora esta não seja a opção recomendada por não fazer parte do padrão ANSI.

 

Exemplos de uso de WHERE + 1

Quando as condições do where são geradas dinamicamente, e o programador vai acrescentando-as com AND dentro de ifs, por estas dependerem de outros fatores do programa que gera o SQL, fica clara sua intenção:Se nao houver condição adicional, a query permanece assim …

SELECT * FROM Destinatario where 1 = 1

… mas no caso, se for verdadeira a condição logo em seguida do seu exemplo, ela pode ficar:

SELECT * FROM Destinatario where 1 = 1 AND Nome = "Ramos da Informática"

Note que se não houvesse o WHERE 1=1, ela ficaria desta forma, e não funcionaria:

SELECT * FROM Destinatario AND Nome = "Ramos da Informática" 
  -- temos um erro aqui --^

Para uma condição AND só, o autor poderia ter posto o WHERE dentro da condição, mas se forem varias condiçoes, o WHERE 1=1 permitiria várias condições separadas, montadas por ifs diferentes:

SELECT * FROM Destinatario where 1 = 1
SELECT * FROM Destinatario where 1 = 1 AND Nome = "Ramos da Informática"
SELECT * FROM Destinatario where 1 = 1 AND Cidade = "Uberlândia"
SELECT * FROM Destinatario where 1 = 1 AND Nome = "Ramos da Informática" AND Cidade = "Uberlândia"

Assim, o AND Nome poderia estar em um if e o AND Cidade em outro, e todos funcionariam independente de ter que saber se já há um if anterior no código que gera o SQL.

Como mencionado pelo @bfavaretto, o CakePHP, por exemplo, utiliza esta técnica.

Particularmente, acho melhor usar maneiras mais limpas do que como foi usado, como concatenar com AND somente quando se tratar da 2ª condição em diante, mas cada um tem seus critérios, e em cada momento uma determinada técnica pode ser melhor do que outra.

Saindo desse exemplo específico de uso, pode até acontecer de alguém usar um WHERE “neutro” quando quer testar alguma condição durante o desenvolvimento do código, eliminando a condição original (equivalente a colocar WHERE true, que também serviria para a explicação inicial), mas isto já é outra história.

No nosso caso em específico, o IF desta linha confirma a hipótese inicial do parâmetro opcional com AND:

IF(@param IS NOT NULL) -- <== Aqui
SET @sql = (@sql + ' AND Nome = ''' + @param + '''');

Conclusão

Neste artigo, aprendemos a resposta para a antiga pergunta de “qual é o propósito do WHERE 1=1?” Não é uma técnica de otimização avançada, mas uma convenção de estilo adotada por alguns desenvolvedores.
Curso Banco de Dados

LEIA TAMBÉM:

Gostou deste conteúdo?

Assine o E-Zine Ramos da Informática e receba semanalmente conteúdos exclusivos focados em desenvolvimento frontend, backend e banco de dados para transformar sua carreira tech.

📘 Conteúdo exclusivo

Dicas, insights e guias práticos sobre desenvolvimento e bancos de dados.

🚀 Hacks de carreira

Ferramentas e estratégias para se destacar no mercado tech.

🌟 Tendências tech

As novidades mais relevantes em desenvolvimento web e mobile e bancos de dados.

Já somos mais de 5.000 assinantes! Junte-se à nossa comunidade de profissionais que compartilham conhecimento e crescem juntos no universo tech.

Quero Assinar Agora

Compartilhe:

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade sobre linguagens de programação, banco de dados, DevOps, Internet das Coisas, tecnologia da indústria 4.0, Cyber Segurança e Startups.
spot_img

Relacionados

RECENTES

Ferramentas e bibliotecas React – Parte I

O ecossistema React continua a evoluir rapidamente, trazendo ferramentas...

Ferramentas e bibliotecas Node.js – Parte II

O artigo "Pacotes e ferramentas Node.js que deveria conhecer"...

Cargos de Dados e Cloud Mais Demandados em 2025

Diretor financeiro, especialista em dados e gerente agrícola: cargos...

Transforme sua carreira e conquiste sua primeira vaga de desenvolvedor em 2025!

O mercado de tecnologia nunca esteve tão aquecido, mas...

Ferramentas Essenciais para o Desenvolvedor Web Moderno – I

Mensalmente, vamos apresentar aos leitores da Ramos da Informática...

WordPress em Crise: Desafios Atuais e o Futuro da Plataforma

No dia 11 de janeiro de 2025, Gavin Anderegg...

Controle DualSense - Starlight Blue

Experimente jogos com imersão total. O Controle DualSense oferece vibração tátil e gatilhos adaptáveis para uma jogabilidade única. E agora, em um azul celestial!

Saiba Mais

SSD Kingston NV2 1TB M.2 NVMe Gen 4.0

Maximize sua performance com velocidades incríveis de leitura (3500MB/s) e gravação (2800MB/s). Compacto, potente e na cor celeste, perfeito para gamers e profissionais.

Saiba Mais