Several syntax and logic issues abound in your attempted query:
- ON Clause: Using an - ONclause without a matching- JOIN. Your query can possibly work if- ONis replaced by- WHEREwhich is the older, deprecated way of joining tables in SQL known as the implicit join.
 
- Cross Join: As is the drawback of the implicit join, you mistakenly (or intentionally?) did not join - zz_def dwith matched columns. While you match- qand- w, not matching- drendered a cross join on that table to return more rows than desired. Also,- dis not used in- SELECT.
 
- Misaligned Subquery: Layered subqueries show a missing closing parenthesis where you misaligned table alias - tthat references calculated column,- rn, at a different level.
 
- WHERE Logic: Since - ROW_NUMBERreturns positive values, your logical condition- t.RN < 1may return no results once syntax errors are resolved.
 
Additionally, consider a few tips:
- Explicit Join: Use the explicit - JOINto join tables and avoid the subtle mistake of running a cross join.
 
- SELECT - *: Avoid using SELECT * to better control presentation and visibly show selected columns. Specifically, no where are the following columns shown in subquery:- nach_id, language, value, dq_nrwhich you intend to match to outer query.
 
- Column Aliases: Alias all columns in - SELECTto visibly show sources to tables. Specifically, your window function does not explicitly reference table sources of columns. Ideally, you would run- PARTITION BY w.vv_lfd ORDER BY w.emptyvalue, q.position.
 
- Table Aliases: Use better table aliases than the letters chosen to avoid code readers to scan back to - FROMand- JOINclauses for their original sources. Ideally,
 - from ZZ_temp_Value t ... zz_def d ... dv_format f
from ZZ_temp_Value tmp ... zz_def def ... dv_format fmt
 
Assuming your ultimate need is to delete rows where the row number is greater than 1 really (rn > 1), consider adjusted query (that would need testing).
DELETE FROM ZZ_temp_Value 
WHERE (nach_id, vv_lfd, language, value, dq_nr, emptyvalue, unit) IN 
  (SELECT t.nachi, t.vvlfd, t.language, t.value, t.dq_nr, t.emptyvalue, t.unit 
   FROM 
     (SELECT tmp.nachi, tmp.vv_lfd, tmp.language, tmp.value
             , tmp.dq_nr, tmp.emptyvalue, tmp.unit 
             , ROW_NUMBER() OVER (PARTITION BY tmp.vv_lfd 
                                  ORDER BY tmp.emptyvalue, fmt.position) rn
      FROM ZZ_temp_Value tmp
      INNER JOIN dv_format fmt
          ON  fmt.vv_lfd = tmp.vv_lfd
          AND fmt.nach_id = tmp.nach_id
      -- CROSS JOIN zz_def d                     -- CAREFULLY THINK ABOUT THIS! 
     ) t
   WHERE t.rn > 1
  );
DISTINCT and ORDER BY have been removed being redundant. ROW_NUMBER() would repeat for duplicate records and subquery ordering of rows is ignored for outer query results.