Вы вступаете на сложную территорию, известную как «коррелированные подзапросы». Поскольку у нас нет подробной информации о ваших таблицах и ключевых структурах, некоторые ответы могут быть только «возможно».
В вашем начальном запросе IN нотация будет действительной независимо от того, содержит ли OtherTable столбец NameID (и, действительно, существует ли OtherDesc в виде столбца в таблице или OtherTable - что непонятно ни в одном из ваших примеров, но предположительно столбец OtherTable). Именно это поведение делает коррелированный подзапрос в коррелированный подзапрос. Это также обычный источник беспокойства для людей, когда они впервые сталкиваются с ним - неизменно случайно. Поскольку стандарт SQL предписывает поведение интерпретации имени в подзапросе как обращения к столбцу во внешнем запросе, если в таблицах, упомянутых в подзапросе, нет столбца с соответствующим именем, но имеется столбец с соответствующее имя в таблицах, упомянутых во внешнем (главном) запросе, ни один продукт, который хочет заявить о соответствии (этой части) стандарта SQL, не сделает ничего другого.
Ответом на ваш вопрос Q1 является «это зависит», но с учетом вероятных предположений (NameID существует в виде столбца в обеих таблицах; OtherDesc существует только в OtherTable), результаты должны быть одинаковыми с точки зрения возвращенного набора данных, но не может быть эквивалентным с точки зрения производительности.
Ответ на ваш вопрос Q2 заключается в том, что в прошлом вы использовали низшую, если не дефектную СУБД. Если он поддерживает EXISTS, то СУБД может по-прежнему жаловаться на количество результатов.
Ответ на ваш Q3 применительно к первому запросу EXISTS: «t доступен в качестве псевдонима для всего оператора, но o доступен только в качестве псевдонима в скобках». Применительно к вашему второму примерному блоку - с AND, соединяющим два вложенных элемента выбора (второй из которых пропускает открытые скобки, когда я смотрю на него), тогда «t доступен в качестве псевдонима во всем утверждении и ссылается на тот же таблица, но есть два разных псевдонима, оба помечены как 'o', по одному для каждого подзапроса ". Обратите внимание, что запрос может не возвращать данные, если OtherDesc уникален для данного значения NameID в OtherTable; в противном случае для него требуется две строки в OtherTable с одинаковым NameID и два значения OtherDesc для каждой строки в таблице с этим значением NameID.