diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionColumnTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionColumnTest.java
index 1baedbe..9c5f7b5 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionColumnTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionColumnTest.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.test.base.AsterixTestHelper;
 import org.apache.asterix.test.common.TestExecutor;
 import org.apache.asterix.testframework.context.TestCaseContext;
+import org.apache.asterix.testframework.xml.TestCase;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -62,10 +63,16 @@
     public static Collection<Object[]> tests() throws Exception {
         IGNORED = new HashSet<>(AsterixTestHelper.readTestListFile(new File(IGNORE_FILE)));
         Collection<Object[]> tests = LangExecutionUtil.tests("only_sqlpp.xml", "testsuite_sqlpp_column.xml");
-        return tests.stream().filter(t -> {
-            TestCaseContext ctx = (TestCaseContext) t[0];
-            return !IGNORED_GROUPS.contains(ctx.getTestCase().getFilePath()) && !IGNORED.contains(ctx.toString());
-        }).collect(Collectors.toList());
+        return tests.stream().filter(SqlppExecutionColumnTest::allow).collect(Collectors.toList());
+    }
+
+    private static boolean allow(Object[] test) {
+        TestCaseContext ctx = (TestCaseContext) test[0];
+        TestCase testCase = ctx.getTestCase();
+        boolean notIgnored = !IGNORED_GROUPS.contains(testCase.getFilePath()) && !IGNORED.contains(ctx.toString());
+        boolean noCorrelatedPrefix = testCase.getCompilationUnit().stream().noneMatch(cu -> cu.getPlaceholder().stream()
+                .anyMatch(ph -> ph.getValue().toLowerCase().contains("correlated-prefix")));
+        return notIgnored && noCorrelatedPrefix;
     }
 
     protected TestCaseContext tcCtx;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/ignore_column.txt b/asterixdb/asterix-app/src/test/resources/runtimets/ignore_column.txt
index 9d88127..34feb90 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/ignore_column.txt
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/ignore_column.txt
@@ -26,7 +26,6 @@
 distinct: record
 
 ##### Unsupported merge-policy (correlated-prefix) #####
-ddl: index-cast-null
 dml: using-correlated-prefix-merge-policy
 dml: using-correlated-prefix-merge-policy-with-feed
 dml: scan-delete-btree-correlated-secondary-index-nullable
diff --git a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/validation/ColumnPropertiesValidationUtil.java b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/validation/ColumnPropertiesValidationUtil.java
index 3fe6907..dd70d96 100644
--- a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/validation/ColumnPropertiesValidationUtil.java
+++ b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/validation/ColumnPropertiesValidationUtil.java
@@ -19,15 +19,18 @@
 package org.apache.asterix.column.validation;
 
 import java.util.List;
+import java.util.Set;
 
 import org.apache.asterix.common.config.DatasetConfig;
+import org.apache.asterix.common.context.CorrelatedPrefixMergePolicyFactory;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
-import org.apache.asterix.common.utils.StorageConstants;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 
 public class ColumnPropertiesValidationUtil {
+    private static final Set<String> UNSUPPORTED_MERGE_POLICIES = Set.of(CorrelatedPrefixMergePolicyFactory.NAME);
+
     private ColumnPropertiesValidationUtil() {
     }
 
@@ -37,7 +40,7 @@
             return;
         }
 
-        if (!StorageConstants.DEFAULT_COMPACTION_POLICY_NAME.equals(mergePolicy)) {
+        if (UNSUPPORTED_MERGE_POLICIES.contains(mergePolicy.toLowerCase())) {
             throw CompilationException.create(ErrorCode.UNSUPPORTED_COLUMN_MERGE_POLICY, sourceLocation, mergePolicy);
         }
 
