En ocasiones podemos querer comprobar si el valor de una columna en una tabla existe en otra tabla. Sin que exista una relación de clave entre ellas.

Por ejemplo, podríamos tener las tabla:

CREATE TABLE usuario (
    id serial PRIMARY KEY,
    nombre VARCHAR (50) NOT NULL,
    email VARCHAR (255) NOT NULL
);

CREATE TABLE post (
    id serial PRIMARY KEY,
    id_usuario INT NOT NULL,
    titulo VARCHAR (100) NOT NULL,
    contenido TEXT NOT NULL
);

La tabla post tiene una columna id_usuario donde se debería poner el id del usuario que ha escrito el post. Sin embargo no es una Foreign Key, con lo cual no hay manera de saber si todos los post.ids concuerdan realmente con un usuario.id o si son números que no existen en la tabla usuario y por lo tanto son datos erróneos.

Para ver cuántos post contienen números en id_usuario que no existen en la tabla usuario, podemos hacer la siguiente consulta:

SELECT 
    post.id_usuario, 
    post.id 
FROM post 
LEFT JOIN usuario ON usuario.id = posts.id_usuario 
WHERE usuario.id IS NULL;

O también podríamos usar la cláusula NOT EXISTS:

SELECT
    post.id_usuario,
    post.id
FROM post
WHERE NOT EXISTS (
    SELECT id
    FROM usuario
    WHERE id = post.id_usuario
);