Было бы намного проще, если бы вы могли предоставить полную структуру ваших таблиц. Я думаю, что ваша структура таблицы выглядит примерно так:
tab1 имеет столбец capitaincome и city
tab2 имеет столбец safety_score и city
Ошибка не в том, что обе таблицы имеют одинаковое имя столбца, что нормально. Существует проблема в логике c и понимании.
Проблема заключается в том, что вы создаете декартово произведение, но вам требуется внутреннее объединение: в то время как декартово произведение предоставляет вам результат, полученный объединением каждой строки из одна таблица с каждой строкой в другой таблице при внутреннем объединении дает результат, в котором каждая строка из одной таблицы с одинаковым значением атрибута (в вашем случае с одним и тем же городом) объединяет строки из другой таблицы с одинаковым значением атрибута.
Вы не можете решить эту проблему, используя подзапрос и декартово произведение.
Вам нужно использовать предложение объединения:
select t1.capitaincome, t1.city, t2.safety_score
from tab1 t1
join tab2 t2 on t1.city = t2.city
where t2.safety_score = 1
Или вы можете решить проблему, используя старый стиль соединения:
select t1.capitaincome, t1.city, t2.safety_score
from tab1 t1,
tab2 t2
where t1.city = t2.city
and t2.safety_score = 1