Encuentra loggings en múltiples campos que no están en otra tabla

Digamos que tengo 2 tablas ( tb1 , tb2 ) con el siguiente esquema:

 CREATE TABLE tb1 ( col1 INT NOT NULL, col2 TEXT NOT NULL, col3 TEXT NOT NULL, col4 REAL ); 

¿Cómo encuentro loggings de tb1 que no están presentes en tb2 en las columnas col1 , col2 , col2 ?

Investigué sobre esto , esto y esto, pero hasta ahora todos encuentran loggings solo en una columna. También utilicé los códigos / lógica en estos enlaces, pero terminé devolviendo el resultado incorrecto con un performance realmente malo (loggings de 45K en tb1, loggings de 1.7M en tb2). Estoy tratando de implementar esto en SQLite.

Si quieres ver, aquí está mi código de muestra (usando left join w / where es nulo), pero no confíes en él:

 SELECT * FROM tb1 LEFT JOIN tb2 ON tb1.col1 = tb2.col1 AND tb1.col2 = tb2.col2 AND tb1.col3 = tb2.col3 WHERE tb2.col1 IS NULL AND tb2.col2 IS NULL AND tb2.col3 IS NULL 

Pruebe NOT EXISTS , por supuesto, el performance puede depender de los índices existentes …

 SELECT * FROM tb1 WHERE NOT EXISTS ( SELECT * FROM tb2 WHERE tb1.col1 = tb2.col1 AND tb1.col2 = tb2.col2 AND tb1.col3 = tb2.col3 ) 

¿Qué tal algo así como:

 SELECT * FROM tb1 WHERE NOT EXISTS (SELECT * FROM tb2 WHERE tb1.col1 = tb2.col1 AND tb1.col2 = tb2.col2 AND tb1.col3 = tb2.col3) 

Hola @Dnoeth y @Sober,

Puede encontrar el siguiente problema con la solución Dnoeth, avíseme si no lo está.

Msg 402, nivel 16, estado 1, línea 9 Los types de datos text y text son incompatibles en el operador igual.

nota: no pude publicar esto en el comentario debido a una menor reputación.