No SQL, o operador diferente de (
!= ) compara a não igualdade de duas expressões. Ou seja, ele testa se uma expressão não igual a outra expressão. Se um ou ambos os operandos forem
NULL , NULL é devolvido. SQL também tem outro operador diferente de (
<> ), que faz a mesma coisa. Qual deles você usa pode depender do seu DBMS, qual você se sente mais confortável em usar e talvez também se sua organização possui convenções de codificação que determinam qual deve ser usado. Tabela de origem
Imagine que nosso banco de dados contém a tabela a seguir. Esta é a tabela que usaremos para os exemplos nesta página.
SELECT * FROM Owners; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Exemplo
Se quisermos retornar uma lista de todos os proprietários que não possuem um
OwnerId de 3 , poderíamos fazer isso:SELECT *
FROM Owners
WHERE OwnerId != 3; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Nossa consulta usa o operador diferente de (
!= ) para testar se o OwnerId coluna não é igual a 3 . A consulta retorna todos os proprietários, exceto o proprietário número 3. Strings
Ao comparar com um valor de string, use aspas ao redor da string. Por exemplo, se quisermos obter informações sobre todos os proprietários cujo primeiro nome não seja Homer, poderíamos fazer o seguinte:
SELECT *
FROM Owners
WHERE FirstName != 'Homer'; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Várias condições
Se você tiver várias condições, poderá usar vários operadores (sejam os mesmos operadores ou diferentes).
Assim:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Depois de começar a usar mais condições, você deve usar parênteses para cercar as condições que deseja que sejam avaliadas primeiro. Se você não fizer isso, poderá obter resultados inesperados, devido às condições serem avaliadas em uma ordem que você não pretendia.
Negando a condição
Se você usar o
NOT operador para negar a condição fornecida pelo operador diferente de, você acabará obtendo os resultados dos iguais (= ) operador:SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer'; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Nesse caso, é melhor usar apenas os iguais (
= ) operador, assim:SELECT *
FROM Owners
WHERE FirstName = 'Homer'; Claro, isso em si poderia ser negado com o
NOT operador, que nos daria o mesmo resultado que o diferente de (!= ) operador nos dá:SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer'; Valores NULOS
Você deve ter notado que nossa tabela de amostra original contém algumas
NULL valores no Email coluna. Uma coluna contendo
NULL significa que não tem valor. Isso é diferente de 0 ou false , ou até mesmo uma string vazia. Você não pode usar o operador diferente de para comparar com
NULL . Na verdade, isso pode depender do seu DBMS e de sua configuração. Mas, por enquanto, vamos ver o que acontece se eu tentar comparar o Email coluna para NULL . SELECT * FROM Owners
WHERE Email != NULL; Resultado:
(0 rows affected)
A maneira de testar não
NULL valores é usar IS NOT NULL . Portanto, precisaríamos reescrever a afirmação acima da seguinte forma.
SELECT * FROM Owners
WHERE Email IS NOT NULL; Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Agora temos apenas as linhas que não são
NULL no Email coluna. Se estiver interessado, consulte
SQL Server ANSI_NULLS Explained para ver como você pode alterar o modo NULL os valores são tratados no SQL Server.