Триггеры устанавливаются на основе, так что
IF (@area = 'L')
будет смотреть только на первую запись из вставленной таблицы. Попробуйте добавить проверку как часть предложения WHERE:
WHERE Tables.Table_Area_Id = (SELECT TOP 1 Table_Area_Id AS Table_Area_Id FROM inserted) AND
Tables.Table_Year = (SELECT SUBSTRING(CAST(YEAR(GETDATE()) AS VARCHAR), 3, 2) )
AND SUBSTRING(Tables.Table_Area_Id, 1, 1) = 'L'
Вы уверены, что основной оператор Select возвращает только одну строку? Я заметил, что вы широко использовали квалификатор Top (1). Если он возвращает более одной строки, в таблицу истории будет добавлено более одной строки.
Возможно, в качестве слепого выстрела, попробуйте поставить Top (1) для крайнего выбора:
INSERT INTO Table_History
SELECT TOP(1) (SELECT TOP 1 ...
В противном случае это выглядит так, как будто в триггере происходит некоторая рекурсия. Я не вижу его, но при желании вы можете отключить рекурсивный запуск для всей базы данных, поскольку это опция базы данных.