sexta-feira, 27 de março de 2026

ORACLE PL/SQL - Diferença entre NOT LIKE e <>

 ## 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