SQL·테스트 데이터
IN에 NULL을 넣어도 빈 값을 못 찾는 이유는?
사용할 도구
open 상태와 미등록 상태를 함께 찾으려 해도 IN ('open', NULL)은 후자를 놓칩니다. NULL은 일반 동등 비교 값이 아닙니다. IN 생성기에서 일반 값과 누락 조건을 분리해 의도를 드러내세요.
비어 보이는 세 값을 구분
'NULL' -- text consisting of four letters
'' -- empty string
NULL -- SQL null'NULL'은 네 글자, ''는 빈 문자열, NULL은 값 없음입니다. 원본 빈 칸의 저장 방식은 가져오기 규칙에 달려 있으므로 자료형과 변환을 먼저 확인하세요.
도구는 빈 입력 줄을 제거하므로 빈 문자열 조건이 생기지 않습니다. SQL 따옴표 없이 값을 입력하세요. 빈 문자열 검색은 적용처에서 별도 조건으로 설계해야 합니다.
NULL은 IS NULL로 분리
open
NULL("state" IN ('open') OR "state" IS NULL)문자열·열 state·PostgreSQL·NULL 별도 조건을 선택하세요. open은 IN, NULL은 IS NULL이 됩니다. 열 이름이 필요하고 NULL만 있으면 빈 IN 대신 IS NULL만 나옵니다. 괄호도 유지하세요.
문자열 정책은 글자 'NULL'을 검색합니다. 올바른 선택은 데이터 의미에 달립니다. 거부 정책으로 모호한 입력을 멈추고 오류 제거보다 의미를 우선하세요.
알 수 없음과 거짓은 다릅니다
NULL이 포함된 일반 비교는 참·거짓 대신 알 수 없음이 될 수 있습니다. WHERE는 참인 행만 남깁니다. 누락 여부가 목적이면 IS NULL을 쓰세요.
NOT IN으로 바꿀 때 더 주의
NOT IN도 단순 해결책이 아닙니다. 목록에 NULL이 있으면 불일치 값도 참이 아닐 수 있습니다. 알 수 없음을 뒤집어도 참이 아니므로 단순 치환하지 마세요.
불일치 일반 값만인지, NULL 포함인지, NULL 제외인지 먼저 정하고 격리 표에서 일치·불일치·NULL을 시험하세요. SheepDev는 DB 연결 없이 텍스트만 만듭니다.
다른 조건과 합칠 때 괄호 확인
active = TRUE AND ("state" IN ('open') OR "state" IS NULL)괄호를 없애면 OR와 AND 결합이 달라질 수 있습니다. 여기서는 open·NULL 모두 active가 참이어야 합니다. 정렬 후 묶음을 보고 예상 행도 검증하세요.