Posting your question in multiple places at once is impolite. It can lead to several people answering your question, without knowing that it has been answered already elsewhere. It means that you just think of yourself (maximizing your chance of getting an answer) and you don't care if you waste the time of others. Think about that before you do it next time!
The reason that not all cities in Germany have an admin_level of 8 is that there are some "kreisfreie Städte" which use admin_level 6, and 6 (and, outside of Baden-Württemberg, even two "Stadtstaaten" which use admin_level 4 (the third Stadtstaat, Bremen, does have an admin_level 6 boundary to separate it from Bremerhaven). 4).
Finding the cities that do not have an admin_level 8 tag but instead an admin_level 6 tag could be done like this:
SELECT a.*
FROM planet_osm_polygon a
LEFT OUTER JOIN planet_osm_polygon b
ON ST_COVERS(a.way,b.way) AND b.boundary='administrative' AND b.admin_level='8'
WHERE a.boundary='administrative' AND a.admin_level='6' AND b.osm_id IS NULL
The "left outer join" instructs PostgreSQL to find pairs of adminlevel 6/8 entities where the adminlevel 6 entity covers the adminlevel 8 entity, and to set the adminlevel 8 entity to NULL if none is found matching this criterion. Then, we only select those adminlevel 6 entities where the adminlevel 8 part is NULL, i.e. those that have no "children" on admin_level 8.