anko Ну по-порядку пожалуй...
Для начала с твоим запросом разберемся...
1. Всю типизацию необходимо выносить в самый верхний уровень запроса. Это обязательно. В подзапросах типизации значений быть не должно.
2. Теперь смотрим второй "подзапрос". Ты пишешь "ВНУТРЕННЕЕ" соединение, а соответственно ты хочешь чтобы из первой таблицы отсеклись все строки которые не встречаются во второй. А теперь ответь на вопрос... а может быть в таблице СТРОК документа "А" быть строки допустим документа "Б"??? В данном случае простое левое соединение даст тот же самый результат.
3. Теперь рассмотрим запрос в целом... Первый подзапрос называется ТОВАР (таблица с полями Номенклатура, Свойства, Бренд). Второй подзапрос называется ПРАВИЛА (колонки Бренд, Цена, Наценка, Приоритет).
Теперь определим что из этих двух таблиц мы хотим получить: Номенклатура, Цена, Приоритет...
Сразу видно что в таблице ТОВАР нам надо 2 колонки Номенклатура + Бренд (для связи), в таблице ПРАВИЛА нам надо колонки Бренд (для связи) + Цена + Приоритет. Теперь, у нас в результирующую колонку должна попасть только та номенклатура которая содержится в таблице ПРАВИЛА. Соответственно либо мы ТОВАР соединяем с ПРАВИЛА через внутреннее, либо ПРАВИЛА с ТОВАР через левое. По первому варианту, (как я понимаю) мы получим двойной прогон таблицы ПРАВИЛА. Сначала для соединения, потом для отсечения из результата того что нет в ПРАВИЛА. Во втором варианте мы получим то что нам надо, при этом ничего лишнего не будет.
Учитывая все вышеизложенное я думаю что запрос должен выглядеть так:
ВЫБРАТЬ
Товар.Номенклатура КАК [Номенклатура $Справочник.Номенклатура]
,Правила.Цена КАК [Цена $Справочник.ТипыЦен]
,Правила.Приоритет КАК [Приоритет $Число]
ИЗ
(ВЫБРАТЬ
$ДокШапка.Бренд КАК Бренд
,$ДокСтроки.ЦенаПоставщика КАК Цена
,$ДокСтроки.Приоритет КАК Приоритет
ИЗ ДокументСтроки.ПравилоФормированияЦен КАК ДокСтроки $nolock
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПравилоФормированияЦен КАК ДокШапка $nolock
ПО $ДокСтроки.ТекущийДокумент = $ДокШапка.ТекущийДокумент
ГДЕ $ДокСтроки.СвояЦена = :ТипЦен
И $ДокСтроки.Вкл <> 0) КАК Правила
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
$Номенклатура.ТекущийЭлемент КАК Номенклатура
,$Свойства.Бренд КАК Бренд
ИЗ Справочник.Номенклатура КАК Номенклатура $nolock
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СвойстваНоменклатуры КАК Свойства
ПО $Номенклатура.ОсновноеСвойство = $Свойства.ТекущийЭлемент
) КАК Товар
ПО Правила.Бренд = Товар.Бренд
Пы.сы. покажи данный запрос с режим отладки.
Ну и наконец что касается "Почему с внутреннее работает дольше". Смотри в сообщения парсера в которых указаны индексы которые подобраны для выполнения и их стоимость. Чем ниже стоимость тем лучше составлен твой запрос. И даже если ты попадаешь в индекс надо знать отличие в работе соединений. Почитай книжки по SQL.