O ponto de interrogação não é só um sinal de pontuação
Achar que ponto de interrogação é só aquele rabisco que aparece no final de uma pergunta é simplificar demais o que esse caractere faz na prática. Ele está em Everywhere — planilhas, scripts, interfaces, nomes de arquivo, URLs, bases de dados. E em cada um desses lugares ele se comporta de forma diferente, às vezes quebrando coisa sem aviso. Eu já perdi tempo demais descobrindo por que um script que rodava perfeitamente em desenvolvimento parava de funcionar em produção porque alguém mapeou incorretamente a codificação de caracteres. O '?' era o sintoma, não o problema.
ponto de interrogação e a questão da codificação
O problema real começa quando você tenta trabalhar com esse caractere em ambientes que não lidam bem com Unicode. Em Python 2, por exemplo, strings eram bytes por padrão. Se você juntasse um texto com acentos e um ponto de interrogação sem especificar a codificação, o resultado podia ser lixo ou erro silencioso. A solução foi simples no papel: usar codecs.decode() e codecs.encode() com utf-8 explicitamente. Na prática, significava refactorar funções inteiras que eu dava como resolvidas. Em SQL, o ponto de interrogação tem outra vida. Em muitos bancos de dados, ele é usado como placeholder para parâmetros em queries preparadas. Quem escreve queries dinâmicas com concatenação de strings e esquece de escapar o caractere acaba com problemas de injeção ou com erro de sintaxe. O workaround que eu uso hoje é simplesmente nunca mais construir query com f-string ou format(). Sempre parâmetros nomeados ou posicional, e o driver faz o trabalho sujo.
👉 Clique no botão abaixo para saber mais sobre o assunto!
como usar o ponto de interrogação em programação sem dor de cabeça
Não existe receita única, porque cada linguagem trata o caractere de um jeito. Aqui vai o que funciona no dia a dia: No JavaScript, o ponto de interrogação apareceu de vez em quando como operador opcional chaining com o ?? e ?. Isso mudou completamente a forma como lida com valores nulos. Antes você fazia if (obj && obj.prop && obj.prop.valor). Agora é obj?.prop?.valor. Mas cuidado: o operador só existe no ECMAScript 2020+. Se seu ambiente de build ainda compila para ES5, isso vai dar erro de syntax.
No Excel e Google Sheets, o ponto de interrogação é um coringa em funções LIKE e PROCV. Ele representa exatamente um caractere qualquer. Então "ca?a" casa com "casa", "cama", "cana", mas não com "caa". Muita gente confunde com o asterisco, que representa zero ou mais caracteres. Eu aprendi isso na Maroca quando uma planilha de validação de CPF retornava resultados errados porque eu havia usado o coringa errado. No Shell (bash), o ponto de interrogação tem significado duplo. Dentro de colchetes de padrão de expansão, [?]