MS Access, VBA, SQL и удаление записей из объединенных таблиц

На днях я столкнулся с очень интересной работой MS Access при удалении необходимых записей из таблицы средствами SQL.

Суть вопроса состояла в удаление записей тех продуктов в таблице Valid_data, которые присутствуют в таблице ProductsIgnore. Данный запрос отрабатывается в большом макросе VBA, после пары запусков которого, с периодичностью 50%/50%, возникала ошибка и соответственно появлялось отладочное debug-окно.

Запрос выглядел вот таким образом:

Как видим, логика его полностью верна, связываются две таблицы по ключу и соответственно остаются только те записи, которые как раз и необходимо удалить, что мы и пытаемся сделать. Но даже Google говорит нам, что проблема есть и ее пытаются решить различными методами, включая сортировку, что не очень положительно влияет на производительность…

Вспомнив наставления своего бывшего начальника («учителя»), я решил сделать запрос немного более рациональным и при этом ускорив выполнение путем деление на подзапрос:

Суть запроса в следующем, мы просто формируем список продуктов для игнора, и проверяем, входит ли продукт в данный список. Если входит, то удаляем его из необходимой таблицы.

После данной реализации запрос стал отрабатываться гораздо быстрее и ошибка перестала возникать :) Мораль и вывод следующий — не стоит забывать про подзапросы, они существенно могут облегчить выполнение и помогут избежать не нужных ошибок!