レッスン 7

よくある SQL のミス

意図しないクロス JOIN、NULL の落とし穴、間違った時間ウィンドウ、危険な前提を避けます。

SQL のミスはテキスト上は小さく見えても、本番挙動では大きくなります。JOIN 条件の欠落、間違った時間境界、予期しない NULL がレポート、API レスポンス、マイグレーションを変えられます。

欠落または弱い JOIN 条件

JOIN 条件が欠けていると、データベースは意図よりはるかに多くの行を結合できます。ON 句があっても、正しいキーを使っているか、スキーマが要求する場合はテナントやアカウント境界を含んでいるかを確認してください。

NULL 比較

NULL は通常の値と等しくありません。IS NULL または IS NOT NULL を使います。

WHERE deleted_at IS NULL

deleted_at = NULL が通常の比較のように動作することを期待しないでください。

曖昧な時間ウィンドウ

時間フィルタは包含・排他的な端を明示すべきです。

WHERE created_at >= '2026-01-01'
  AND created_at < '2026-02-01'

日や月の最後の秒を含めようとするより、通常こちらの方が安全です。

アプリケーションパスでの SELECT *

SELECT * は探索中には有用ですが、アプリケーションコードでは危険です。不要な列を取得し、スキーマ形状への依存を隠し、レビューを困難にします。

要点

クエリを整形し、句ごとに読み、小さな前提を探します。JOIN キー、NULL の挙動、時間範囲、選択列です。

SQL Formatter は、実行やレビューの前にそれらの前提を露出するのに役立ちます。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る