GORM может составить запросов.
Написать стандартный запрос и затем вызвать метод .SubQuery()
:
sub := db.Table("table2").Select("ID").Where("col1 = ?", 'val1').SubQuery()
The youможно поместить его в качестве параметра в методе .Where()
err := db.Table("table1").Where("col2 NOT IN ?", sub).Find(&table1Type).Error
//handle the error