Ваш первоначальный запрос действительно: выберите persnr из Pruefung, если тот же самый persnr существует для другого matrikelnr.
"для каждого уникального matrikelnr отобразить все соответствующие persnr" Это достигается с помощью агрегации:
В зависимости от используемой СУБД вы можете использовать что-то вроде (SQL Сервер использует STRING_AGG, но MySQL использует GROUP_CONCAT)
SELECT matrikelnr,STRING_AGG(matrikelnr,',')
GROUP BY matrikelnr
Вы не можете легко достичь того, что вы получили от коррелированного запроса (ваш Первая попытка) с использованием объединения.
Редактировать: Объединение не приводит к ожидаемому «декартову произведению», когда нет условия объединения (CROSS JOIN). Объединение соответствует двум наборам на основе условия объединения. Причина, по которой вы получаете больше записей, состоит в том, что соединение просматривает ключ соединения (PERSNR) и выполняет его сопоставление.
Например, для 101 у вас есть 3 записи. Это означает, что вы получите 3х3 результата. Затем вы фильтруете результаты для случаев, когда X.matrikelnr <> Y.matrikelnr Если мы предположим, что matrikelnr уникален, это будет означать, что строка соответствует самому себе. таким образом, вы потеряете 3 результата, в результате чего получите 3x3 - 3 = 6.
Если вы хотите достичь чего-то в SQL, вы должны сначала определить, что вы ожидаете использовать, а затем использовать соответствующие инструменты (в этом коррелированные по регистру запросы не включаются)