## Diferença entre NOT LIKE e <>
São operadores completamente diferentes com propósitos distintos:
### **LIKE / NOT LIKE**
- Usado para **comparação de padrões** com strings
- Permite uso de curingas: `%` (qualquer sequência) e `_` (um caractere)
- Funciona **apenas com dados do tipo texto** (VARCHAR2, CHAR, etc.)
```sql
-- Exemplos com NOT LIKE
WHERE nome NOT LIKE 'João%' -- Não começa com "João"
WHERE nome NOT LIKE '%Silva%' -- Não contém "Silva"
WHERE nome NOT LIKE '_____' -- Não tem exatamente 5 caracteres
```
### **<> (ou !=)**
- Usado para **desigualdade exata**
- Compara valores completos
- Funciona com **qualquer tipo de dado** (números, datas, textos)
```sql
-- Exemplos com <>
WHERE id <> 10 -- id diferente de 10
WHERE nome <> 'João' -- nome exatamente diferente de 'João'
WHERE data <> SYSDATE -- data diferente de hoje
```
## Principais diferenças:
CARACTERÍSTICAS NOT LIKE <>
**Propósito** Comparação de padrão Desigualdade exata
**Curingas** Sim (%, _) Não
**Tipo de dado** Apenas texto Qualquer tipo
**NULL** Retorna NULL Retorna NULL
**Performance** Geralmente mais lento | Geralmente mais rápido
## Comportamento com NULL:
**Ambos retornam NULL quando comparados com NULL:**
```sql
-- Se campo é NULL:
WHERE campo NOT LIKE '%valor%' -- NULL (não retorna)
WHERE campo <> 'valor' -- NULL (não retorna)
-- Para incluir NULLs, é necessário tratar:
WHERE (campo IS NULL OR campo NOT LIKE '%valor%')
```
## Exemplo prático com seu caso:
```sql
-- NOT LIKE: exclui apenas padrões específicos
WHERE PAR_X_OPERADORPARC NOT LIKE 'PARCERIA - 05'
-- Exclui: 'PARCERIA - 05', 'PARCERIA - 05 algo', 'XPARCERIA - 05X'
-- <>: exclui apenas o valor exato
WHERE PAR_X_OPERADORPARC <> 'PARCERIA - 05'
-- Exclui APENAS: 'PARCERIA - 05' (exato, sem espaços extras)
-- Se o campo tem espaços, <> falha:
-- 'PARCERIA - 05 ' (com espaço) NÃO será excluído com <>
-- Mas será excluído com NOT LIKE 'PARCERIA - 05' (depende do padrão)
```
## Para seu cenário específico:
Se o problema é espaços em branco, considere:
```sql
-- NOT LIKE com tratamento de espaços
AND TRIM(PAR_X_OPERADORPARC) NOT LIKE 'PARCERIA - 05'
-- Ou com <> tratando espaços
AND TRIM(PAR_X_OPERADORPARC) <> 'PARCERIA - 05'
```
**Resumo:** Use `NOT LIKE` quando precisa de busca por padrão com curingas. Use `<>` para comparar valores exatos e em campos não-texto.
Nenhum comentário:
Postar um comentário