Poprawnie – to polecenie SQL usuwa dokładnie jeden rekord, i to taki, który odpowiada najstarszemu pracownikowi w tabeli. Kluczowe są tu dwie rzeczy: klauzula ORDER BY oraz LIMIT 1. Najpierw baza danych sortuje wiersze z tabeli Pracownicy po kolumnie rok_urodzenia rosnąco, czyli od najstarszego do najmłodszego (mniejszy rok urodzenia = starsza osoba). Dopiero na tak posortowanym zbiorze polecenie DELETE z LIMIT 1 usuwa pierwszy rekord z góry, czyli właśnie najstarszego pracownika. Warto zauważyć, że taka składnia (DELETE ... ORDER BY ... LIMIT ...) jest charakterystyczna m.in. dla MySQL i MariaDB. W standardowym SQL nie zawsze można użyć ORDER BY bezpośrednio w DELETE, ale w praktyce, w aplikacjach webowych, bardzo często pracuje się właśnie na tych silnikach, więc to rozwiązanie jest jak najbardziej realne. W innych systemach (np. PostgreSQL) podobny efekt robi się przez podzapytanie lub CTE. Moim zdaniem to jest bardzo przydatny wzorzec, gdy chcemy usuwać „najstarsze” lub „najmłodsze” rekordy, np. najstarszy log systemowy, najstarsze zamówienie w statusie roboczym, najstarszy wpis w kolejce zadań. Ważna dobra praktyka: takie operacje powinny opierać się na jednoznacznym kryterium sortowania (np. rok_urodzenia + id), żeby uniknąć sytuacji, że przy tych samych wartościach pola baza wybierze losowo któryś rekord. W projektach produkcyjnych często dodaje się dodatkową kolumnę typu data_utworzenia albo używa klucza głównego w ORDER BY, żeby zachować deterministyczne zachowanie. Zwróć też uwagę, że DELETE operuje na wierszach (rekordach), a nie na strukturze tabeli. Do usuwania kolumn służy ALTER TABLE, a do kasowania całej tabeli – DROP TABLE. To rozróżnienie jest absolutna podstawa pracy z SQL w każdej większej aplikacji.
To polecenie SQL nie modyfikuje struktury tabeli, tylko usuwa konkretny wiersz danych. W SQL istnieje wyraźny podział między poleceniami do pracy na danych, a poleceniami do pracy na strukturze bazy. DELETE należy do grupy DML (Data Manipulation Language) i służy do usuwania rekordów, czyli pojedynczych wierszy w tabeli. Natomiast operacje typu usunięcie całej tabeli lub kolumny realizuje się za pomocą poleceń DDL (Data Definition Language), takich jak DROP czy ALTER. Jeżeli ktoś kojarzy usunięcie tabeli z DELETE FROM, to jest to typowy błąd: do usunięcia tabeli używamy DROP TABLE Pracownicy; i po takim poleceniu struktura tabeli znika całkowicie z bazy. DELETE FROM Pracownicy bez warunku WHERE usunęłoby wszystkie rekordy, ale sama tabela – jej kolumny, indeksy, definicja – nadal by istniała. To bardzo ważne rozróżnienie, bo w praktyce administracji bazą przypadkowe DROP TABLE bywa katastrofalne, a DELETE da się jeszcze często cofnąć z backupu danych. Podobnie mylne jest myślenie, że DELETE FROM zadziała na kolumnie, np. usunie rok_urodzenia. Do modyfikacji struktury kolumn używamy ALTER TABLE, np. ALTER TABLE Pracownicy DROP COLUMN rok_urodzenia;. To jest zupełnie inny typ operacji niż usuwanie wiersza. W przedstawionym zapytaniu kolumna rok_urodzenia jest tylko kryterium sortowania w klauzuli ORDER BY, które decyduje, który rekord zostanie wybrany do usunięcia. Kolejna pułapka myślowa polega na tym, że ktoś widzi ORDER BY rok_urodzenia i myśli: „usunie się jakiś rekord, w którym ta wartość jest w ogóle wpisana”. To też nie jest prawidłowe. Baza nie usuwa „pierwszego lepszego” rekordu z niepustą datą urodzenia, tylko ten, który po posortowaniu według rok_urodzenia znajdzie się na pierwszej pozycji. Dzięki LIMIT 1 usuwany jest dokładnie jeden wiersz, nie więcej. W praktyce to bardzo precyzyjna operacja: jeśli rok_urodzenia oznacza rok urodzenia pracownika, to najmniejsza wartość w tej kolumnie odpowiada najstarszemu pracownikowi. To właśnie jego rekord zostaje skasowany. Z mojego doświadczenia wiele nieporozumień bierze się z pomieszania pojęć „rekord”, „kolumna” i „tabela”. Dobra praktyka jest taka, żeby zawsze czytać zapytanie fragmentami: DELETE – co robi? FROM Pracownicy – na jakiej tabeli? ORDER BY rok_urodzenia – według czego sortuje wiersze? LIMIT 1 – ile wierszy usunie? Taki sposób analizy bardzo pomaga unikać błędnych wniosków i jest standardem przy pracy z SQL w profesjonalnych projektach.