Question: I wanted to run a simple query to throw up all the rows of `Table1` where a principal column value is not present in a column in another table (`Table2`).

I tried using:

```
SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal

```

This is instead throwing a syntax error. Google search led me to forums where people were saying that MySQL does not support `NOT IN` and something extremely complex needs to be used. Is this true? Or am I making a horrendous mistake?

Answer: 
To use IN, you must have a set, use this syntax instead:

```
SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM table2)

```
Be carefull `NOT IN` is not an alias for `<> ANY`, but for `<> ALL`!

<http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html>

```
SELECT c FROM t1 LEFT JOIN t2 USING (c) WHERE t2.c IS NULL

```

cant' be replaced by

```
SELECT c FROM t1 WHERE c NOT IN (SELECT c FROM t2)

```

You must use 

```
SELECT c FROM t1 WHERE c <> ANY (SELECT c FROM t2)

```