En SQL, el operador no es igual a (!=
) compara la no igualdad de dos expresiones. Es decir, prueba si una expresión es no igual a otra expresión.
Si uno o ambos operandos son NULL
, NULL
es devuelto.
SQL también tiene otro operador no igual a (<>
), que hace lo mismo. El que use puede depender de su DBMS, con cuál se sienta más cómodo y quizás también si su organización tiene alguna convención de codificación que dicte cuál debe usarse.
Tabla fuente
Imagine que nuestra base de datos contiene la siguiente tabla. Esta es la tabla que usaremos para los ejemplos de esta página.
SELECT * FROM Owners;
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Ejemplo
Si quisiéramos devolver una lista de todos los propietarios que no tienen un OwnerId
de 3
, podríamos hacer esto:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Nuestra consulta utiliza el operador no igual a (!=
) para probar si el OwnerId
la columna no es igual a 3
. La consulta devuelve todos los propietarios excepto el propietario número 3.
Cadenas
Al comparar con un valor de cadena, use comillas alrededor de la cadena. Por ejemplo, si quisiéramos obtener información sobre todos los propietarios cuyo primer nombre no es Homer, podríamos hacer lo siguiente:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Condiciones Múltiples
Si tiene varias condiciones, puede usar varios operadores (ya sean los mismos operadores o diferentes).
Así:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Una vez que comience a usar más condiciones, debe usar paréntesis para rodear las condiciones que desea que se evalúen primero. Si no hace esto, es posible que obtenga resultados inesperados debido a que las condiciones se evalúan en un orden que no pretendía.
Negar la Condición
Si usa el NOT
operador para negar la condición proporcionada por el operador no igual a, terminará obteniendo los resultados de los iguales (=
) operador:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
En este caso, es mejor que utilices los iguales (=
) operador, así:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Por supuesto, esto mismo podría negarse con el NOT
operador, que nos daría el mismo resultado que el no igual a (!=
) el operador nos da:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
Valores NULOS
Es posible que haya notado que nuestra tabla de muestra original contiene un par de NULL
valores en el Email
columna.
Una columna que contiene NULL
significa que no tiene valor. Esto es diferente a 0
o false
, o incluso una cadena vacía.
No puede usar el operador no igual a para comparar con NULL
. En realidad, esto puede depender de su DBMS y su configuración. Pero por ahora, veamos qué sucede si trato de comparar el Email
columna a NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Resultado:
(0 rows affected)
La forma de probar no NULL
valores es usar IS NOT NULL
.
Por lo tanto, necesitaríamos reescribir la declaración anterior de la siguiente manera.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Resultado:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Ahora obtenemos solo aquellas filas que no son NULL
en el Email
columna.
Si está interesado, consulte SQL Server ANSI_NULLS Explained
para ver cómo puedes cambiar la forma NULL
los valores se tratan en SQL Server.