De två frågorna är desamma, förutom att den andra är ANSI-92 SQL-syntax och den första är den äldre SQL-syntaxen som inte inkorporerade join-satsen. De bör producera exakt samma interna frågeplan, även om du kanske vill kontrollera.
Du bör använda ANSI-92-syntaxen av flera anledningar
- Användningen av JOIN-satsen skiljer relationslogiken från filterlogiken (WHERE) och är därför renare och lättare att förstå.
- Det spelar ingen roll med just den här frågan, men det finns några omständigheter där den äldre syntaxen för yttre koppling (med + ) är tvetydig och frågeresultaten därför är implementeringsberoende - eller så kan frågan inte lösas alls. Dessa förekommer inte med ANSI-92
- Det är bra praxis eftersom de flesta utvecklare och dba:er kommer att använda ANSI-92 nuförtiden och du bör följa standarden. Alla moderna frågeverktyg kommer säkerligen att generera ANSI-92.
- Som påpekat av @gbn, tenderar det att undvika oavsiktliga korskopplingar.
Själv motstod jag ANSI-92 under en tid eftersom det finns en liten konceptuell fördel med den gamla syntaxen eftersom det är lättare att föreställa sig SQL som en kartesisk masskoppling av alla använda tabeller följt av en filtreringsoperation - en mental teknik som kan vara användbar för att förstå vad en SQL-fråga gör. Men jag bestämde mig för några år sedan att jag behövde följa med tiden och efter en relativt kort anpassningsperiod föredrar jag det nu starkt - främst på grund av det första skälet ovan. Det enda stället där man bör avvika från ANSI-92-syntaxen, eller snarare inte använda alternativet, är med naturliga kopplingar som är implicit farliga.